Angular {{AOT vs JIT}} vs ນັກຂຽນໂປແກມ React: ສ່ວນ - ຂ້ອຍ

ໃຫ້ພວກເຮົາເລີ່ມຕົ້ນໂດຍການປຽບທຽບ Interpreter ແລະ Compiler

ນັກລວບລວມຂໍ້ມູນຈາກ X ຫາ Y ແມ່ນໂປແກມທີ່ແປໂປຣແກຣມ p ຈາກພາສາ X ບາງພາສາເຂົ້າໄປໃນໂປແກມທຽບເທົ່າ semantically p ′ໃນບາງພາສາ Y ດ້ວຍວິທີທີ່ semantics ຂອງໂປຣແກຣມໄດ້ຖືກຮັກສາໄວ້, ໝາຍ ຄວາມວ່າແປ p′ ກັບນາຍແປພາສາ ສຳ ລັບ Y ຈະໃຫ້ຜົນໄດ້ຮັບຄືກັນແລະມີຜົນຄືກັບການແປ p ກັບນາຍພາສາ ສຳ ລັບ X.

ນັກຂຽນ === ຜູ້ແປ

ນັກລວບລວມນາຍແປພາສາ Vs

ນາຍພາສາ ສຳ ລັບພາສາ A ແມ່ນໂປແກມທີ່ປະຕິບັດໂປແກຼມ p ທີ່ຂຽນເປັນພາສາ X ເຊັ່ນວ່າມັນປະຕິບັດຜົນແລະປະເມີນຜົນຕາມທີ່ໄດ້ ກຳ ນົດໄວ້ໃນຂໍ້ ກຳ ນົດ X.

Interceptor === ຜູ້ປະຕິບັດງານ

ຜູ້ລວບລວມຂໍ້ມູນໃນ Angular 1

ຕົວລວບລວມຂໍ້ມູນທົ່ວໄປ

ຕົວລວບລວມ AngularJS 1.x ເຊິ່ງຂ້ອນຂ້າງທົ່ວໄປໃນ ທຳ ມະຊາດທີ່ເຮັດວຽກ ສຳ ລັບແມ່ແບບໃດໆໂດຍປະຕິບັດຊຸດຄອມພິວເຕີ້ແບບເຄື່ອນໄຫວ. ເນື່ອງຈາກລັກສະນະນີ້ JavaScript Virtual Machine ຕໍ່ສູ້ກັບການຄິດໄລ່ທີ່ດີທີ່ສຸດໃນລະດັບຕ່ ຳ. ເຫດຜົນຫຼັກທີ່ຢູ່ເບື້ອງຫລັງແມ່ນ:

`VM ບໍ່ຮູ້ຮູບຮ່າງຂອງວັດຖຸທີ່ໃຫ້ສະພາບການ ສຳ ລັບເຫດຜົນການກວດສອບທີ່ສົກກະປົກ (ເຊັ່ນວ່າຂອບເຂດອັນທີ່ເອີ້ນວ່າ), ມັນແມ່ນຂໍ້ມູນທີ່ມີຢູ່ໃນຖານຄວາມ ຈຳ ໄດ້ຮັບຂໍ້ມູນທີ່ຂາດຫາຍໄປເຊິ່ງເຮັດໃຫ້ການປະຕິບັດຊ້າລົງ '

ນັກລວບລວມຂໍ້ມູນໃນ Angular 2 ++

JIT

ໃນໄລຍະເບື້ອງຕົ້ນຂອງແອບພິເຄຊັ່ນ Angular 2 ໃນເວລາທີ່ bootstrapped ໃນ browser, ຜູ້ລວບລວມຂໍ້ມູນ JIT ເຮັດວຽກຫຼາຍຢ່າງ (ແຍກແບບແມ່ແບບສ່ວນປະກອບທຸກຄັ້ງທີ່ຜູ້ໃຊ້ເປີດ ໜ້າ ເວບ, ສ່ວນທີ່ປ່ຽນແປງແມ່ແບບ HTML ເປັນລະຫັດທີ່ສາມາດໃຊ້ໄດ້) ເພື່ອວິເຄາະສ່ວນປະກອບ ໃນຄໍາຮ້ອງສະຫມັກໃນເວລາແລ່ນແລະສ້າງລະຫັດໃນຫນ່ວຍຄວາມຈໍາ. ໃນເວລາທີ່ຫນ້າເວັບໄດ້ຮັບການປັບປຸງໃຫມ່, ທຸກໆວຽກທີ່ໄດ້ເຮັດແລ້ວກໍ່ຖືກຖີ້ມ, ແລະຜູ້ລວບລວມຂໍ້ມູນ JIT ກໍ່ເຮັດວຽກທັງ ໝົດ ຄືນ. ນີ້ແມ່ນການຖອຍຫລັງທີ່ ສຳ ຄັນຂອງ AOT

ກະແສຂອງເຫດການກັບການລວບລວມເວລາພຽງແຕ່ໃນເວລາ

  • ການພັດທະນາໂປແກຼມ Angular ກັບ TypeScript ແລະການລວບລວມ ຄຳ ຮ້ອງສະ ໝັກ ກັບ Tsc.
  • ມັດທະຍົມ→ Minification →ການ ນຳ ໃຊ້
  • ຢູ່ທີ່ລູກຄ້າ→ດາວໂຫລດຊັບສິນ JavaScript ທັງ ໝົດ
ພາບລວມຂອງ JIT

AOT

ຜູ້ລວບລວມຂໍ້ມູນປ່ຽນລະຫັດ TS ເປັນລະຫັດ JS (JS ນີ້ໄດ້ຖືກລວບລວມແລ້ວ ສຳ ລັບມຸມເປັນຕົ້ນ). ດຽວນີ້, ລະຫັດ JS ທີ່ຖືກລວບລວມນີ້ຖືກລວບລວມໂດຍ browser ອີກຄັ້ງເພື່ອໃຫ້ HTML ສາມາດສະແດງໄດ້. ດັ່ງນັ້ນຄຸນລັກສະນະຂອງຮູບສີ່ຫລ່ຽມໄດ້ຖືກເບິ່ງແຍງແລ້ວໂດຍ AOT compiler ແລະດັ່ງນັ້ນ browser ບໍ່ຕ້ອງກັງວົນຫລາຍກ່ຽວກັບການຊອກຄົ້ນຫາການປ່ຽນແປງ, ການສ້າງອົງປະກອບແລະການເພິ່ງພາອາໄສການເພິ່ງພາອາໄສ.

ການລວບລວມ AOT

ດັ່ງນັ້ນພວກເຮົາຍ້າຍການລວບລວມຂໍ້ມູນອອກຈາກເວລາແລ່ນ (browser) ໄປສູ່ການຜະລິດລະຫັດແຫຼ່ງ. ວິທີການລວບລວມແບບນີ້ເກີດຂື້ນພຽງຄັ້ງດຽວໃນເວລາສ້າງແລະພວກເຮົາບໍ່ ຈຳ ເປັນຕ້ອງຈັດສົ່ງເຄື່ອງຂຽນ Angular ແລະແມ່ແບບ HTML ເຂົ້າໄປໃນມັດ.

ໃນ Angular 5+, ທ່ານຈະສາມາດລະເລີຍ JiT ແລະໄປເຕັມ AoT, ເຖິງແມ່ນວ່າຈະເປັນການສ້າງການພັດທະນາ !!!

ກະແສຂອງເຫດການຕ່າງໆທີ່ມີການລວບລວມລ່ວງ ໜ້າ

  • ການພັດທະນາໂປແກຼມ Angular ກັບ TypeScript →ການລວບລວມເອກະສານກັບ ngc →ປະຕິບັດການລວບລວມແມ່ແບບກັບເຄື່ອງຂຽນ Angular ແລະສ້າງ (ປົກກະຕິ) TypeScript
  • ການລວບລວມລະຫັດ TypeScript ເຂົ້າໃນ JavaScript →ການຜູກມັດ→ Minification ification ການໃຊ້ງານ
  • ລູກຄ້າ→ດາວໂຫລດຊັບສິນທັງ ໝົດ →ເກີບເປີດແລະໂປແກຼມເປີດໂປແກຼມ Angular
ພາບລວມຂອງ AOT

ຄຸນລັກສະນະຂອງ AOT

ການສະແດງຜົນໄວຂື້ນ, ການຮ້ອງຂໍ asynchronous ໜ້ອຍ ລົງ, ຂະ ໜາດ ດາວໂຫລດຂອບຂະ ໜາດ ນ້ອຍກວ່າແລະກວດພົບຂໍ້ຜິດພາດຂອງແມ່ແບບກ່ອນ ໜ້າ ນີ້

ຜູ້ລວບລວມຂໍ້ມູນໃນ React

JSX ສະ ໜັບ ສະ ໜູນ ທັງ Babel ແລະ TypeScript ຕັ້ງແຕ່ເລີ່ມຕົ້ນເຊິ່ງເຮັດໃຫ້ການເຊື່ອມໂຍງກັບ JavaScript ກໍ່ສ້າງໄດ້ງ່າຍແລະມີປະຕິກິລິຍາບໍ່ສົນໃຈລຸ້ນທີ່ຖືກໃຊ້ໂດຍທັງ Babel ແລະ TypeScript ເຊິ່ງເປັນຄວາມກັງວົນ ໜ້ອຍ.

ຜູ້ປະກອບຂໍ້ມູນຄັ້ງ ທຳ ອິດປະເມີນຕົ້ນໄມ້ອົງປະກອບຂອງ React ແລະເຮັດການເພີ່ມປະສິດທິພາບທີ່ດີທີ່ສຸດໃຫ້ກັບສ່ວນປະກອບ React ຂອງທ່ານ. ນັກຂຽນປະຕິກິລິຍາຕ້ອງຮູ້ຈັກສ່ວນປະກອບຮາກຂອງຊຸດສະ ໝັກ ແລະເມື່ອໄດ້ຮູ້ວ່າມັນຄວນຄິດໄລ່ຕົ້ນໄມ້ສ່ວນປະກອບທັງ ໝົດ ຂອງສ່ວນປະກອບຈາກນັ້ນໂດຍອັດຕະໂນມັດ.

ເພື່ອບອກຜູ້ລວບລວມຂໍ້ມູນ React ແມ່ນສ່ວນປະກອບຮາກ ສຳ ລັບການສະ ໝັກ ຂອງທ່ານ, ທ່ານຕ້ອງໃຊ້ຟັງຊັນ Prepack world ທີ່ເອີ້ນວ່າ __optimizeReactComponentTree (MyRootReactComponent). ຕົວຢ່າງໃນ sourecode ຂອງທ່ານ (ກ່ອນທີ່ຈະມັດມັນແລະຖ່າຍທອດໃຫ້ກັບ Prepack) ທ່ານອາດຈະເຮັດ:

// MyComponent.js
import React ຈາກ 'react';
ຫ້ອງຮຽນ MyComponent ຂະຫຍາຍ React.Component {
  render () {
    ກັບຄືນ  ສະບາຍດີໂລກ! ;
  }
}
// __optimizeReactComponentTree ແມ່ນຮູ້ພຽງແຕ່ກັບ Prepack
// ດັ່ງນັ້ນພວກເຮົາຫໍ່ມັນໄວ້ໃນເງື່ອນໄຂສະນັ້ນລະຫັດຍັງໃຊ້ໄດ້
// ເພື່ອທົດສອບການພັດທະນາທ້ອງຖິ່ນໂດຍບໍ່ຕ້ອງໃຊ້ Prpeack
ຖ້າ (ທົ່ວໂລກ .__ optimizeReactComponentTree) {
  __optimizeReactComponentTree (MyComponent);
}
module.exports = MyComponent;

React ລວບລວມຂໍ້ມູນລະຫັດ JavaScript ທີ່ຈັດການກັບ DOM ເສມືນໃນຂະນະທີ່ Angular ລວບລວມກັບລະຫັດ JavaScript ທີ່ຈັດ DOM ໂດຍກົງ. ສາມາດເຮັດໃຫ້ໂຄງການຂຸດຄົ້ນເພີ່ມເຕີມໃນ blog ຕໍ່ໄປຂອງຂ້ອຍ. :)