树锯在树干和小块的树的例证,与附近的手锯。

JavaScript Responseabile,Parte II

Supponiamo Che Insieme A Tutto IL Dev团队Abbiate Fatto Pressione Con Entusiasmo每个联合国remake Totale Dell'Architettura del Sito Web Aziendale,Che Comincia A Mostrare I Suoi Anni。Le Vostre Prechiere Sono状态Ascoltate Dal Management - 苏苏富通Alla C-Suite - Che Ha Dato IL Via Buera。Tuti Euforici,VOI E IL队Avete Cominciato Subito A Lavorare Con i Team Di Design,Copy E IA E Nel Giro Di Poco Tempo,Avete Sfornato IL Nuovo Covice。

L'Articolo Prosegue Sotto

ècominciatotutto con innocenteNPM安装qui eNPM安装là。Prima Che Ve Ne Rendeste Conto,Però,Stavate Installando delle依赖于Produzione来到Uno Studente Della Triennnale Che Fa小桶站Senza Curarsi di CosaSuccederàILGiornoDopo。

Poi Avete Lanciato。

在Questo CasoPerò中,一个不同的Diglenza delle conseguenze delle peggiori bevute,l'Agonia非Inizia La Mattia Dopo。没有。成功Mesi Dopo,Sotto L'Agghiaciante Forma Di Degole Nausea E MAL DEL中型管理Che Si Chiedono来到Mai Le Chiedono E Le Revenue Si Sono Entrambe绑架DAL Momento Del Lancio。POI SI TOCCA LA FRENESIA Quando IL CTO DI RITORNO DA联合国周末NEI BOSCHI SI CHIDEE来到MAI IL SITO SI CARICASSE COLIN LENTAMENTE SUL SUO TELCONO - AMMESSO CHE SI CARICASSE。

Prima erano tutti contenti。阿塞罗nessuno.ècontento。Benvenuti Al Vostro Primo Hangover da JavaScript。

NonèColpaVostra#第1节

Quando Vi Ritrovate Con联合国痛苦宿醉,VI Meritereste联合国贝尔“ve L'Avevo Detto”,Anche Se Potbbe Scaturirne Una Litigata ... Ammesso Che Riusiate A Qui VI Trovate的Litigare Nel Miserabile Stato。

Quando Abbiamo A Che Can Con联合国宿舍DA JavaScript,C'è联合国Sacco di Colpa da distrimeire。Ma Puntare IlDitoèunaPerditadi Tempo。IL Panorama del Web attuale Richiede IterazioniPiśRapide di Quelle dei Nostri竞争对手。Questo Tipo Di压力机意义意义Che Probabilmente Dovremo Trarre Vantaggio da Promunque Mezzo A Nostra Disposizione Per Essere IlPiùProvutivi可能。CIò.意义的CheèPiùProbabile Creare App ConPiù架空魔术架eShies Che Possono Ledere La Performance e l'Accessibilità,Ma Che NonSaràUSTARIAMENTEUN INSURCCESSO。

Lo Sviluppo webnonècanile。è联合国Lungo Lavoro Duro Che Raramente Faciamo Bene Al Primo Tentativo。La Paree Migliore del Lavorare Sul Web,Però,张Che NonDobbiamo.essere perfetti fin dall'inizio。PossiaMo票价Dei Miglioramenti Dopo Il LancioeSutyoèPropriol'Artomento di Questa seconda parte diQuesta Serie.。LaPerfezioneèMoltoLontana。每个ORA,Liberiamoci Dell'Hangover di JavaScript Migliorando La信用版一个breve termine del vostro sito。

横向燕麦酸盐soliti sospetti#section2.

Potrebbe Sembrary Un Foreizio,Ma Vale La Pena Scorrere L'Elenco Delle Ottimizzazioni Di Base。NonèneroLitoche i grandi team di sviluppo,Permiconolmente per quelli che laverano su molti lopository o Che Non Usano Batherplate Ottimizzati,Le Ignorino。

Scuotete Quegli Alberi.#第3部分

Perma Cosa,Assicuratevi Che La Vostra Toolchain Sia Configurata每票价树摇晃。SE IL TREE ShakingèHONCOCHETTONUOVO每VOI,L'ANNO SCORSO HO ScrittoUna Guida Sull'argomento。在Poche假释,IL树震动è联合国Processo Nel Quale Gli出口非Utilizzati Nella VoStra CodeBase非Vengono Impacthettati Nel Vostro Bundle in Produzione。

il tree摇晃èdisponibile“开箱即用”con i现代捆绑网客卷起O.咕噜声O.,che nono sono捆绑马Piuttosto.任务赛道,每vii no lo faranano。联合国任务跑步者非Crea联合国依赖图形来到Invece Fa联合国捆绑。Al Intrario,Fanno dei任务酌情案件在Pasto Con QualsiAsi Numero di插件中留下洛瑞。我是任务赛道霍顿Essere Estesi Con Plugin Che Usino Dei Bundler每个Parageare JavaScript。Se EstendereCosiìi任务跑步者è每Voi联合国问题,Probabilmente Dovrete票价UN审计手册E rimuovere IL Codice Inutilizzato。

栖息地震动Sia Efficeace,Devono Essere Vere Le Seguenti Condizioni:

  1. la logica della vostra app e i package che安装nel vostro progetto devono essere creatiModuli ES6.。摇晃di modulicommonjs.非纯粹的可能性。
  2. IL Vostro Bundler.Deve TraSformare i Moduli ES6在UN Altro Formato Di Modulo Durante IL建立时间。Se成功在Una Toolchain Che USA Babel,@ Babel / Preset-Env配置特定的模块:假每次阻碍Che Il Codice ES6 Venga Convertito一个CommonJs。

Nella RemotaPossibilità在崔伊尔树摇晃非Avvenga Durante IL Build,Potrebbe Essere Utilf Farlo Funzionare。Ovviamente,La Sua Efficacia Varia Caso每张Caso。Dipende Anche Dal Fatto Che I Moduli Che Instemate Intrafucano DegliEffetti Collat​​erali.,Che Potebero流感LaPocleitàdelBundler di票价震动Degli出口inulilizzati。

Suddidete Quel Codice.#第4部分

Ci Sono delle BuonePossibilitàCheStials Usando Una Promche Forma di代码拆分,Ma Vale La Pena Rivalutare来到Lo State Facendo。indipendentmente da国家Suddidendo Il Codice,CI Sono Due Domande Che Vale Semper La Pena Porsi:

  1. De-Duplicando IL CODICE COMUNEtra gli入口点
  2. 国家Facendo Lazy Loading Di Tutte LeFunzionalitàChePotete Ragionevolmente骗局动态进口()

Queste CoSe Sono重要的Codice Il Codice RidondanteèSondanemale每洛杉矶性能。Anche LaFunzionsitàLazyLoading Migliora La Performance Abbassando L'Inconta Iniziale di JavaScript Su Una Data Pagina。Sul Frente Della Ridondanza,Un Un Tool Di Analisi来了捆绑伙伴puòaiutarvi一个scoprire se avete联合国问题。

BUNDER BUDDY实用程序展示了JavaScript捆绑之间共享多少代码。
Bundle Buddy Esamina Le Statistiche di Compilazione del Vostro webpack e确定Quanto Codice Sia Condiviso Tra I Vostri Bundle。

QuandoC'è在Ballo IL懒人装载,Puòessere联合国PO'艰难索萨雷·达戴鸽子CominiaRe a Cercare delleopach。Quando Le Cerco在Un Progetto Esistente,Cercheròipunti di Interazione dell'utente在Tutta La Codebase,来Gli Eventi点击E键盘E Candidati Simili。Ogni Codiace Che Che Richiede Un'Interazione Con L'Utente每Girareèunpot pot兰念珠菌进口()Dinamico。

Ovviamente,Caricare Gli脚本按需Porta ConSéLacoribilitàChel'Interativitàpossa essere sensibilmente ritardata,Dal Momeo Che Lo Script ofter instra inserere prima caricata。SE L'USO dei DatiNonè联合国问题,在Intazione L'USO Del的Prendete资源提示rel = prefetch.每个Caricare Tali Script Con UnaPrioritàMinore,Così非Si Contenderanno La Banda Con Le Risorse批评。il supporto per.rel = prefetch.èBuono,Ma NonFaràDanniSeNonèSuttona,Dal Momeo Che Chei Browser Che Non Non Supportano Ignoreranno Il Markup Che Non Comentono。

Esternalizzate Il Codice di Terze Parti托管#第5部分

理想,Dovereste票价自主托管Di QuantePiùDipEndenzeDel Vostro Sito Positibile。每个Qualche RagioneCaricare Le Dipendenze da Una Terza parte,segnatele来esterne.Nella Configurazione del Vostro Bundler。se nonriuscite一个farlo,potrebbe意义che i visitaTari del Vostro Sito Scadicheranno Sia Il Codice Ospitato LocalmenteSIA.Lo Stesso Codice da Terze Parti。

在崔奎达波里比德·丹吉加维的Osserviamo Un'ipotetica situazione。Supponiamo Che Il Vostro Sito Carichi Lodash da Un CDN Pubblico。PeròAvete Anche Installato Lodash Nel Vostro Progetto Per Lo Sviluppo Locale。Tuttavia,Se Non Riuscite A Marcare Lodash来自Esterno,Il Vostro Codice diProduzioneFinizioneFinizioneFiniràColCaricarne Una Copia di Terze Partioltre.Alla Copia捆绑,Ospitata Localmente。

Potrebbe.闪烁Cosa Nota Se Sapete来了Muovervi Tra I Bundler,Ma Ho Visto Che Viene SottaTa。Vale La Pena Controlare适度volte。

SE非Siete Concinti Della必需品迪奥斯塔雷苏·沃斯特罗托管Le Dipendenze Di Terze Parti,Allora Prendete In Thineazione L'Opzione di Aggiungere Per LoroDNS预取predonnect.o Addirittura.预装。在Questo Modo Abbasserete IL时间互动Del Vostro Sito E,SE JavaScriptèCrucialePer La Resa del Contenuto,LO速度指数del vostro sito。

替代PIù每米米的PICCOLE#第6部分

userland javascript.ècyunun negozio di caramelle esageratamente grande re noi sviluppatori siamo stupefatti dall'incredibilestutitàdiaferitte开源。我框架e le librerie ci permettono di Estendere le nostre alpmplioni每票价tutta una serie di cose che altrimenti richiedeerebbero tonnellate di tempo e lavoro。

Sebbene io personfillmente preferisca minimizzare aggressivamente i框架e le librerie client-side dei miei progetti,illoro valoreè超方。Tuttavia,Noi阿布布奥LaOrketabilitàdiessere联合国PO'aggressivi Quando Si Tratta di Decidere Cosa Installare。Quando AbbiamoGiàRealizatoe Spedito Qualcosa Che Dipende Da Un Sacco Di Codice Per Funzionare,Abbiamo Accettato IL Fatto Che Solo我维护者Di Quel Codice Lo Hossono Gestire在Pratica。Giusto?

forse,o forse no。Dipende Dalle Dipendenze Che Abbiamo Usato。Per ESEMPIO,反应èStremamentePopolare Ma罚款èun'alternativa.Ultra-Piccola.Che Confivide Ampiamente La Stessa API E Mantiene LaCompatibilitàConMoltiDegli附加组件DI React。鲁莽E.日期FNS.Sono替代MoltoPiùcompatte di时刻.JS.,Che.Nonèsattamentepiccolo

Librerie来了洛奇offrono molti metodi utili。Tuttavia,Alcuni di Essi Sono Facilmente Sostituibili Con Es6 Nativo。IL Metodo.紧凑di lodash.,Per eSempio,sostituibile孔ILmetodo array.过滤Molti Altri Sono SostituibiliSenza Troppa Finda e Senza Il Bisogno di Richiamare Una Grande Libria Di Utility。

Quali Che Siano I Vostri Tool Preferiti,L'IdeaèLaStessa:Fate Delle Ricerche Per Vedere SE CI Sono替代PiùPiccole o Se Le Feature del Linguaggio Nativo Hossono Andare Bene。potreste rimanere stupiti da quanto poco ci voglia per ridurre seriamente l'oppeaddella vostra应用程序。

命运invio diglerenziato degli脚本#第7部分

C'èUna BuonaPossibilitàCheStize Usando Babel Nella Vostra Toolchain每TraSformare Il Vostro Sorgente Es6在Codice Chita Possa Girare Sui浏览器Piùvecchi。Questo Implica Che Siete Costretti A InviaRe Giganti Bundle Anche AI浏览器A Cui Non Servono,FinchéNonCi SarannoPiùi浏览器Piùvecchi?ovviamente no.!!L'Invio在Maniera Inderyziata CI Aiuta广告Aggiarare Questo问题Anyando截止日期建立Del Vostro Sorgente ES6:

  • Bundle Uno,Che Contiene Tutte Le变换E i Polyfill RichiSti Dal Vostro Sito Per Funzionare Sui浏览器Piùvecchi。probabilmente调用giàquesto捆绑包。
  • 捆绑到期,Che ContienePochi o nessun.转变e polyfillperché的ha来了obiettivo浏览器现代。QuestoèILBundle Che Forse noneancora.Inviando。

RealizzareCiòèenof po补充。Ho Scritto Una Guida Riguardante Un Modo Per Farlo,Quindi NonC'èBisognodi Entrare nei dettagli qui。Il Succo della Qualifare la Confiocae Della Vostra Build oal Pota Versure aggiuntiva MaPiùPiccola del Codice JavaScript Del Sito E Inviarla Solo Ai浏览器现代化。La PareeMiglioreèChoRisparmiate Senza Dover Sacrificare Alcuna特色FunzionionItàChiGàFearrite。一个第二个Del Codice Della Vostra Implicaione,I Risparmi Potrebbero Essere Piuttosto意义。

Un'Analisi di webpack-bundle-analyzer di联束兵团德国Progetto(辛斯拉)riespetto一个Una捆绑现代(Destra)。Vedi Immagine一个维度reali

IL.模式piùsemplice.每个inviare questi bundle alle rispettive piattaformeèbreve。Inoltre,Funziona Benissimo Nei浏览器现代:

<! - 现代浏览器加载此文件: - >//www.ashacc205.com/js/app.mjs.<! - 旧版浏览器加载此文件: - >//www.ashacc205.com/js/app.js.

Sfortunatamente,C'èUna Puntualizzazione Riguardo A Questo Pattern:我浏览器遗产IE 11,MA Anche Quelli Relativamente Moderni Feedi Edge Dalla Versione 15 Alla 18,Scaricherannoentrambe.我捆绑了。SE每个voi questa cosanonè联合国问题,allora siete一个posto。

d'altro canto,viserviràunaoluzionetemperanea se siete preoccupatidelle conseguenze sulla performance del下载di entrambe i set di bundle da parte dei浏览器piùvecchi。Ecco Una Soluzione Potenziale Che USA LO脚本注射(Invece dei标签脚本Di Cui Sopra)Per Evitare联合国下载Doppio Che Danneggi I浏览器:

var scriptel = document.createelement(“脚本”);if(“编制Scriptel中的”Nomodule“){//设置现代脚本scriptel.src =”/js/app.ms“;scriptel.type =“模块”;} else {//设置旧版脚本scriptel.src =“/js/app.js”;scriptel.defer = true;//默认情况下=“模块”缺陷,因此请将其设置为。} //注入!Document.Body.AppendChild(Scriptel);

Questo脚本Deveuce Che SE UN浏览器支持l'thationuto.编制nell'elemento.脚本,艾伦议员type =“模块”。Questo Assicura Che I浏览器遗留rootengano solo gli脚本遗产e i浏览器现代ottengano soloquelli现代。特征,perù!Gli脚本invieti dinamicamente si caricano在Maniera asincrona di默认,quindi opostate l'thationuto async 一种SE L'ORDINE DELLE DIPENDENZEè2DICCRUCIALEIMPORTANZA。

命运meno ristpiling.#第8节

非Sono Qui每Devastare Babel。èindispensabile,ma二胺,aggiunge联合国萨科Di Altre Robe Senza Che Nemmeno Lo Sappiate。Conviene Guardare Meglio饮食菜单Quinte Per Vedere Cosa Fa。Alcuni Cambiamenti Minorii Nelle Vostre AbiTudini Di Programmazione Hossono Avere Un Ampatto Positivo Su Quello Che Butta Fuori Babel。

https://twitter.com/_developit/status/111022993999777793.

每个Intenderci,i parametri di默认Sono Una功能莫尔托Pratica di Es6 Che Probilemente USATE GII:

功能记录器(消息,级别=“log”){控制台[级别](消息);}

La Cosa A Cui Prestare Attenzionee QuièILparametro水平,Che Ha默认为“log”。Questo Informa Che Se Vogliamo Invocareconsole.log.Con Questa包装功能,非Dobbiamo特定护理水平。奥蒂莫,没有?Tranne Che Quando Babel Traasforma Questa Funzione,L'Output AppareCosë:

函数记录器(消息){var级= arguments.length> 1 &&参数[1]!==未定义?参数[1]:“log”;控制台[级别](消息);}

Questoènenesempio di fourt,Nonstante Le Nostre Migliori Intenzioni,LaComoditàDelloSviluppatore Possa Ritorcerglisi Contro。Quello Che Nel Nostro Sorgente Era PocoPiùdi Una Manciata di Byte Adesso Stato Trasformato在Qualcosa di莫尔托PIùgrosso nel codice在produzione。neanche l'uglizationpuòfarcigranché,dal momeo che gli argigenti non possono essere ridotti。哦,e se州彭斯托车我休息参数Potrebbero Essere联合国有效的Antidoto,Le Traasformaziioni Che Vi Opera Babel Sono AncoraPiùgrosse:

//源函数记录器(... args){const [级别,消息] = args;控制台[级别](消息);} //babel输出函数记录器(for(var _len = arguments.length,args = new array(_len),_key = 0; _key <_len; _key ++){args [_key] =参数[_key];} const level = args [0],消息= args [1];控制台[级别](消息);}

Peggio Ancora,Babel TraSforma Questo Codice Codice Anche Per Progetti Con Una Configurazione@ Babel / Preset-EnvIndirizzata ai浏览器现代,IL Che Interfica Che Saranno Intersenti Anche I Bundle Moderni Nel Vostro JavaScript Inviato在Maniera Diglerenziata!potereste.USARE UNA.变换宽松每个Attutire IL CLPO - EDèUNA BUONA IDEA,DAL Momenoo Che Sono Spesso UN PO'PIùPICCOLI DELLE LORO COLTOPARTIPIù规范符合 -Ma Abilitare Le Post TransformPuòuniachare问题在Seguito Rimuoverete Babel Dalla Vostra Build Pipeline

indipendentemente se decidiate di abilitare le post transform o meno,ecco联合国modo per tagliare il cruft(Codice Progettato男性,Inutilmente Compricato,NDT)dei parametri di默认曲线。

// Babel将无法触摸此功能记录器(消息,级别){控制台[级别||“log”](消息);}

ovviamente,i parametri di默认非Sono L'Unica.特色崔普利斯塔岛。per eSempio,La传播语法viene traasformata,così来了箭头功能e tutto联合国insieme diAltre COSE.

SE非Volete evitare Questie在Toto,Ci Sono联合国Paio Di Modi Per ridurne l'impatto:

  1. SE State Scrivento Una Librisia,Prendete In Thinazione L'Urilizzo di@ Babel /运行时insieme A.@ Babel / Plugin-Transform-Runtime每个De-DuplicareLe Helper功能Cheb Babel Mette Nel Vostro Codice。
  2. 每个LE采用CUI SONO Applicati Polyfille Nelle App,Potete Includerli Selettivamente Con@ Babel / Polyfillattraverso l'opzioneUseBuiltins:“用法”DI @ Babel / Preset-Env

èsolola mia植物,MA IO Credo Che La Scelta Migliore Sia Quella di Evitare Labilatione la Transpilation Nei Bundle Persati每我浏览器现代。NonèSemperpossibibile,Semmente SEJSX.,Che Deve Essere TraSformato每合奏我浏览器,o se州usando delle特色Davvero All'avguardia Che Nono Sono Ampiamente支持。在Quest'ultimo Caso,Potrebbe Valere La Pena Chiedersi SE Queste特色Quabere Siano Veramente Usialarie / Realizare Una Buona用户体验(E Raramente Lo Sono)。SE Alla Alla结论Che Babel Deve Far Parte della Vostra Toolchain,Allora Vale La Pena OsservarePić在Tantoantantà,达凡托·勒克索·勒克斯省奥蒂玛里Che Babel Sta Faceendo Che Potete Migliorare。

Il MiglioramentoNonènenagara#第19部分

Mentre Vi Massaggiate Le Tempie Chiedendovi QuandoFiniLàSutyoOrribile Hungover Da JavaScript,Dovete Capire CheèSattamenteQuando CI AffrettIaMo一个Mandare Fuori Qualcosa IL Prima Possibile Che La用户体验Soffre。Mentre La Web开发社区Si Ossessa Sulle Iterazioni SemperPińjapide在Nome Della Coldizione,Vale La PenaRallentare联合国PO'。Scoprirete Che FaceendoCosìPotreste非iterare Tanto Velocente Quanto I Vostri竞争对手,MAIl Vostro Prodotto.sarà.piùveloce.del loro。

Dovete Sapere Che Se Alplate Questi Suggerimenti Alla Vostra CodeBase,非Avanzerete Spontaneamente Dalla Sera Alla Mattina。IL WebDevelopmentè联合国莱洛。Il Vostro Lavoro di Maggior obattoVerràFattoQuando vi Sarete Dedicati在Maniera Ponderata每一个Questo Mestiere Lungo纪念日。浓度苏米格利莫林斯蒂连续。MiSurate,睾丸,Ripete e La用户体验Del Vostro SitoMiglioreràePementereteSemperPiùveloci。

UN Ringraziamento Speciale VA A.杰森米勒每个IL技术编辑di Questo Articolo。JasonèiL创意e uno dei tanti维护者di罚款,Un'Alternativa EnormementePiùPiccola di React,Con La Stessa API。硒股票,,每个Favore,通过开放集体考虑Di SpectringArlo的Prendete

Nessun Recommo.

Hai Prolcosa da Rire?

Abbiamo Disattivato I Commeryi,Ma Puoi Vedere Quello Che Gli Altri Hanno Detto Prima Che Li Disattivassimo。

altro da ala.

Webwast.

在Questo Estratto Da World Wasly废物中,Gerry McGovern esamina l'impatto Ambientale di siti web pieni Zeppi di Asset Inutili。数字是物理的。Sembra经济re Gratis Ma Nonè:CI Costa La Terra。
行业

Andiamo Al CuoreDell'AccessibilitàDigitale

艾尔蒙多科技哈尔·埃尔·埃尔·埃尔·埃尔·斯米德·米·迪斯汀·米德利·米。Gli Accessible开发人员Potrebbero Insapettatatatattatatatatatatatatatatatatatatatatatatatatatatatatattatame Far Parte Della Soluzione。