javascript - Vilken anledning finns det att INTE använda kompilation i förväg?


Eftersom jag nu vet vad "angular compiler" faktiskt betyder, skulle detta vara min nästa fråga.

Jag läste här om de positiva och negativa aspekterna av förhandskompilering. För mig kokar det ner till detta:

  • Använd AOT för driftsättningar
  • Använd JIT för utveckling

Den enda giltiga anledningen (enligt min åsikt) till JIT är att det kör mycket snabbare (vilket är trevligt för utvecklingsprocessen). Finns det någon annan anledning?

AOT har så många ENORMA fördelar jämfört med JIT, att jag undrar varför JIT ens är ett alternativ för en distribution.

Svar #1

Tja, det finns många skillnader och några av dem har du påpekat mycket väl. Det beror också på vilken typ av miljö du är i och vad dina behov är.

Jag har använt Angular sedan angular-2.beta.17 när Angular CLI inte fanns och vi var tvungna att ta hjälp av många byggsystem och körmiljöer för att kunna köra projektet var som helst.

Systemjs bygga och köra:

I vissa situationer där flera projekt och ramverk körs tillsammans, kan du inte göra en AOT-build och starta din kod i SPA:n och köra. I system JS-miljön måste du ladda skripten en efter en och de startar upp det.

Du måste ha sett denna typ av bygge- och laddningsskript i många online-verktyg som codepen, plunker, etc. Jag tror att de alla använder systemjs-laddning

Det finns många andra som commonjs loader, babel byggsystem, webpack byggsystem. Men nu är angular cli ett skottsäkert verktyg som internt använder webpack och amber cli för att hantera allt du vill.

Förkompilering och JIT-felsökning

Som namnet antyder gör AOT en tree shaking och inkluderar allt som verkligen används i din kod och kastar bort oanvänd kod samt kompakterar kodstorleken som kan laddas mycket snabbt. Men genom att göra detta förlorar det felsökningskontroll och ger dig inte ett bra felmeddelande om du i produktion vill se vad som är fel.

Samtidigt kan JIT peka på radnumret i TypeScript-filen som har felet och göra ditt liv mycket enklare att felsöka när du kör i utvecklingsläge genom Angular CLI.

Du kan få mycket mer i Angular-kompilatorn och det finns också många verktyg och spel tillgängliga.

en av mina favoriter är ngrev