ΠŸΠ΅ΠΉΠ΄ΠΆΠ΅Ρ€

🌍 ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΌΠΈΡ€! πŸ‘‹

🌍 ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΌΠΈΡ€! πŸ‘‹

ΠŸΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΡ€ΠΎ Dynamic imports, Π½Π΅ частый кСйс ΠΏΠΎ использованию, Π½ΠΎ стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ знания использования Ρ‚Π°ΠΊΠΎΠΉ возмоТности, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π² ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π΅ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ.

πŸš€ ΠœΠΎΡ‚ΠΈΠ²Π°Ρ†ΠΈΡ

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь ΠΌΡ‹ сталкиваСмся со стандартным способом ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΠ½ ΠΆΠ΅ статичный (static import).
Однако Π΅ΡΡ‚ΡŒ случаи Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… динамичСский ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½:

πŸ“Œ Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Из-Π·Π° роста прилоТСния синхронная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° (static import) ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ страниц ΠΈΠ·-Π·Π° Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² (bundles) JavaScript.

πŸ“Œ Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°. Π•ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… бизнСс сцСнариях Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² использовании Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°.

πŸ“Œ Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости. НСдавно я писал ΠΏΡ€ΠΎ NPM package aliases, Ρ‚Π°ΠΊ Π²ΠΎΡ‚ динамичСский ΠΈΠΌΠΏΠΎΡ€Ρ‚ это ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹ ΠΏΡ€ΠΎ сохранСниС ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости, ΠΊΠΎΠ³Π΄Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Π½ΠΎ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ вСрсиями. ДинамичСский ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» исходя ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния ΠΈΠ»ΠΈ готовности ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹.

βš™οΈ ΠŸΡ€ΠΎΡ†Π΅ΡΡ использования динамичСского ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°

Π˜ΠΌΠΏΠΎΡ€Ρ‚ вызываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ keyword import() , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ promise, ΠΈ хотя Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ это ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½Π° самом Π΄Π΅Π»Π΅ это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π’ качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Π° ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ, выступаСт ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ.

πŸ“ Набросал нСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

export const log = () => {
  console.log("ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½")
}

const contactBtn = document.querySelector('#button');

contactBtn.addEventListener('click', () => {
  import('./optionalModule.js').then(module => module.log());
});


Из ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ послС Π²Ρ‹Π·ΠΎΠ²Π° then ( Ρ‚Π°ΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ promise ), ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ экспортируСмый ΠΈΠ· модуля ΠΌΠ΅Ρ‚ΠΎΠ΄ log.

πŸ‘‡ ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ совСты πŸ‘‡

1️⃣ Static import Ρ‚Π°ΠΊ Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚, Π±ΡƒΠ΄Π΅Ρ‚ ошибка:
contactBtn.addEventListener('click', () => {
  import { log } from "./optionalModule.js";
  console.log(log())
});


2️⃣ НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ default exports:
export default log = () => {
  console.log("ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½")
}

contactBtn.addEventListener('click', () => {
  import('./optionalModule.js').then(module => module.default());
});


3️⃣ НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ошибки, ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ динамичСский ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ с ошибкой.

4️⃣ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ динамичСский ΠΈΠΌΠΏΠΎΡ€Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ нСобходимости. ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ исходных зависимостСй, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ большС прСимущСств ΠΎΡ‚ инструмСнтов статичСского Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ tree shaking.

5️⃣ Для Π»ΡŽΠ±ΠΈΡ‚Π΅Π»Π΅ΠΉ React Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΊΠ°, Ρ‡Ρ‚ΠΎ динамичСский ΠΈΠΌΠΏΠΎΡ€Ρ‚ являСтся основой β€œΠ»Π΅Π½ΠΈΠ²ΠΎΠΉ загрузки” Lazy, ΠΏΡ€ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… статСй.

πŸ’¬ Π”Π΅Π»ΠΈΡ‚Π΅ΡΡŒ своим ΠΌΠ½Π΅Π½ΠΈΠ΅ΠΌ Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡΡ…πŸ‘‡! Если Π²Π°ΠΌ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ ΡΡ‚Π°Ρ‚ΡŒΡ, Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π»Π°ΠΉΠΊ! πŸ‘

#JAVASCRIPT #PERFORMANCE
МСдиа 1
Π₯ΠΎΡ‚ΠΈΡ‚Π΅ большС Ρ‚Π°ΠΊΠΈΡ… постов?
ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ΡΡŒ Π½Π° ΠΊΠ°Π½Π°Π» ΠΈ Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π² Telegram.
ΠŸΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° @ivanchikovitclub ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ пост Π² Telegram