亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Rumah hujung hadapan web tutorial js Petua ratikal untuk Meminimumkan Saiz Bundle JavaScript Anda

Petua ratikal untuk Meminimumkan Saiz Bundle JavaScript Anda

Dec 31, 2024 am 01:39 AM

ractical Tips to Minimize Your JavaScript Bundle Size

Karya seni: https://code-art.pictures/

Kenapa Repot?

Hari ini mungkin mengejutkan, tetapi trafik internet masih menjadi isu dalam banyak senario. Rangkaian mudah alih selalunya mempunyai pelan data yang terhad, bateri peranti tidak terhingga dan, yang paling penting, perhatian pengguna semasa menunggu tapak anda dimuatkan adalah terhad. Itulah sebabnya saiz bundle masih penting. Berikut ialah tujuh petua untuk anda pertimbangkan.

1. Jangan Transpile ke ES5

Pada tahun 2020, saya telah mengekalkan apl promosi untuk rangkaian sosial tempatan. Ia adalah aplikasi pek web React TypeScript biasa yang menyasarkan ES5. Apabila webpack 5 dikeluarkan, saya memutuskan untuk menaik taraf. Semuanya berjalan lancar; Saya memantau analitik ralat dan maklum balas pengguna, dan tiada apa yang tidak dijangka. Hanya selepas seminggu saya secara tidak sengaja mendapati bahawa berkas saya mengandungi fungsi anak panah — ia adalah ciri pek web baharu.

Berikut ialah artikel hebat tentang keadaan ES5. Ambilan penting:

  • Banyak perpustakaan sudah mengandungi kod ES6, bermakna berkas dengannya tidak serasi dengan ES5.
  • Kebanyakan tapak popular di dunia tidak serasi dengan ES5 — tapak anda mungkin juga tidak memerlukannya.
  • Jika anda pasti anda masih memerlukan keserasian ES5, anda mesti memasukkan perpustakaan dalam proses binaan anda.

2. Tahu dan Gunakan Ciri Bahasa JavaScript Moden

Berikut ialah beberapa ciri yang membolehkan anda menulis kod yang lebih baik dan lebih padat.

2.1. Penjana

Penjana ialah cara yang cekap untuk melintasi struktur bersarang:

type TreeNode<T> = {
    left?: TreeNode<T>
    value: T
    right?: TreeNode<T>
};

function* traverse<T>(root: TreeNode<T>): Generator<T> {
    if (root.left) yield* traverse(root.left)
    yield root.value
    if (root.right) yield* traverse(root.right)
}

2.2. Medan Kelas Persendirian

Minifier mengetahui dengan pasti bahawa medan ini tidak boleh mempunyai penggunaan luaran, walaupun dalam objek yang dieksport dan bebas untuk memendekkan namanya.

Sumber

export class A {
  #myFancyStateObject
}

Himpunan

export class A{#t}

Ini tidak akan berfungsi, sudah tentu, dengan medan peribadi TypeScript, kerana pengetahuan bahawa ia adalah peribadi hilang apabila tsc telah melaksanakan tugasnya.

2.3. API moden

Pernahkah anda mendengar tentang Promise.withResolvers() atau Map.groupBy()? API ini tidak tersedia secara meluas pada masa penulisan ini, tetapi akan tersedia tidak lama lagi. Luangkan sedikit masa untuk membiasakan diri dengan mereka sekarang dan bersedia untuk menerima pakai mereka dalam beberapa tahun.

Petua: Cara Menemui API JavaScript Baharu

Terdapat banyak blog dan podcast, tetapi saya dapati “surat berita” terbaik ialah fail .d.ts baharu dalam repositori TypeScript. Buka sahaja, sebagai contoh, es2024.collection.d.ts dan nikmati ?

3. Elakkan Penduaan Kod

Adakah anda perasan corak yang berulang?

type TreeNode<T> = {
    left?: TreeNode<T>
    value: T
    right?: TreeNode<T>
};

function* traverse<T>(root: TreeNode<T>): Generator<T> {
    if (root.left) yield* traverse(root.left)
    yield root.value
    if (root.right) yield* traverse(root.right)
}

Kod berulang bukan sahaja meningkatkan saiz berkas tetapi juga menjadikannya lebih sukar untuk memahami perkara yang dilakukan oleh setiap bahagian. Ini selalunya menyebabkan pembangun menulis kod baharu dan bukannya mengenal pasti dan menggunakan semula fungsi utiliti sedia ada, seterusnya membebankan berkas.

Sudah ada banyak bahan yang sangat baik tentang topik ini, jadi daripada menceritakannya semula, saya mengesyorkan klasik: Pemfaktoran Semula oleh Martin Fowler. Ia merangkumi bukan sahaja contoh mudah seperti di atas tetapi juga kes kompleks seperti hierarki berganding dan reka bentuk berulang.

Sekarang, mari kita perbaiki contoh kecil kita. Nampaknya pengapit sering digunakan untuk mengehadkan parameter kepada julat indeks tatasusunan, jadi kami boleh membuat pintasan:

export class A {
  #myFancyStateObject
}

Perubahan ini menjadikannya jelas bahawa n mungkin bertujuan untuk menjadi integer, yang tidak disemak pada masa ini. Ia juga menyerlahkan kes tepi yang tidak dikendalikan: tatasusunan kosong. Dengan membuat deduplikasi kecil ini, kami turut menemui dua potensi pepijat ?

4. Elakkan Terlalu Kejuruteraan

Saya tidak ingat sumber sebenar pepatah ini, tetapi saya rasa ia tepat:

Overgineering ialah menyelesaikan masalah yang anda tidak ada.

Dalam dunia pembangunan web, saya telah memerhatikan dua jenis utama kejuruteraan berlebihan.

4.1. Penggeneralisasian yang berlebihan

Pertimbangkan kod ini. Pelapik ialah gandaan 4px dan warna latar belakang adalah warna biru. Ini mungkin bukan satu kebetulan, dan jika ya, ia mungkin menunjukkan kemungkinan pertindihan. Tetapi adakah kita benar-benar mempunyai maklumat yang mencukupi untuk mengekstrak komponen Butang generik, atau adakah kita terlalu kejuruteraan?

CSS

export class A{#t}

JSX

const clamp = (min, val, max) =>
  Math.max(min, Math.min(val, max))
const x = clamp(0, v1, a.length - 1)
const y = clamp(0, v2, b.length - 1)
const z = clamp(0, v3, c.length - 1)

Nasihat ini agak bercanggah dengan "Elakkan pertindihan". Kod penyahduplikasi yang berlebihan boleh menyebabkan kejuruteraan berlebihan. Jadi, di manakah anda membuat garisan? Secara peribadi, saya menggunakan nombor ajaib "3": sebaik sahaja saya melihat tiga tempat dengan corak yang serupa, mungkin sudah tiba masanya untuk mengekstrak komponen generik.

Dalam kes butang biru kami, saya percaya penyelesaian terbaik ialah menggunakan pembolehubah CSS, sekurang-kurangnya untuk pelapik, dan bukannya mencipta komponen baharu.

4.2. Menggunakan Rangka Kerja Tidak Sesuai

Ya, saya bercakap tentang perkara yang kita suka — Next.js, React, Vue dan sebagainya. Jika apl anda tidak melibatkan banyak interaktiviti pada tahap elemen DOM, atau tidak dinamik, atau sangat mudah, pertimbangkan pilihan lain:

  • Penjana tapak statik — anda boleh mulakan dengan beberapa senarai susun atur.
    • Berhati-hati: sesetengah daripada mereka menggunakan React atau rangka kerja lain di bawah tudung. Jika matlamat anda ialah pengecilan himpunan, cuba sesuatu yang berbeza.
  • Sistem pengurusan kandungan, seperti WordPress.
  • Vanila — amat berguna dalam dua kes:
    • Apl ini sangat mudah.
    • Apl ini tidak banyak memanipulasi DOM tetapi sebaliknya, sebagai contoh, melukis sesuatu pada kanvas. Saya ada projek betul-betul seperti ini.

5. Elakkan Ciri TypeScript Bertarikh

Matlamat semasa TypeScript terutamanya JavaScript menyemak taip, tetapi ia tidak selalu seperti ini. Pada hari sebelum ES6, terdapat banyak percubaan untuk mencipta "JavaScript yang lebih baik," dan TypeScript tidak terkecuali. Sesetengah ciri bermula sejak zaman awal tersebut.

5.1. Enums

Bukan sahaja ia sukar digunakan dengan betul, tetapi ia juga bertukar menjadi struktur yang agak bertele-tele:

TypeScript

type TreeNode<T> = {
    left?: TreeNode<T>
    value: T
    right?: TreeNode<T>
};

function* traverse<T>(root: TreeNode<T>): Generator<T> {
    if (root.left) yield* traverse(root.left)
    yield root.value
    if (root.right) yield* traverse(root.right)
}

JavaScript

export class A {
  #myFancyStateObject
}

Buku Panduan TypeScript rasmi mengesyorkan menggunakan objek mudah dan bukannya enum. Anda juga boleh mempertimbangkan jenis kesatuan.

5.2. Ruang nama

Ruang nama ialah penyelesaian modul pra-ESM. Ia bukan sahaja meningkatkan saiz berkas, tetapi memandangkan ruang nama bertujuan untuk menjadi global, ia menjadi sangat sukar untuk mengelakkan konflik menamakan dalam projek besar.

TypeScript

export class A{#t}

JavaScript

const clamp = (min, val, max) =>
  Math.max(min, Math.min(val, max))
const x = clamp(0, v1, a.length - 1)
const y = clamp(0, v2, b.length - 1)
const z = clamp(0, v3, c.length - 1)

Daripada ruang nama, gunakan modul ES.

Nota: Ruang nama masih berguna, walau bagaimanapun, untuk menulis definisi jenis untuk lib global.

6. Jangan Abaikan Pengoptimuman Kecil

Setiap helah kecil ini boleh menjimatkan beberapa hingga berpuluh-puluh bait dalam berkas. Jika digunakan secara konsisten, ia boleh membawa hasil yang ketara.

6.1. Gunakan Sifat Benar / Palsu

Sebagai contoh, rentetan kosong adalah palsu. Untuk menyemak sama ada ia ditakrifkan dan tidak kosong, anda hanya boleh menulis:

const clampToRange = (n, {length}) =>
  clamp(0, n, length - 1)
const x = clampToRange(v1, a)
// ...

6.2. Benarkan Perbandingan Tidak ketat Kadangkala

Saya percaya menggunakan == untuk memaksa null kepada undefined, atau sebaliknya, adalah wajar.

.btn-a {
    background-color: skyblue;
    padding: 4px;
}
.btn-b {
    background-color: deepskyblue;
    padding: 8px;
}

6.3. Gunakan Nullish Coalescence, Logical OR, dan Parameter Lalai untuk Menggantikan Nilai Lalai

<button className='btn-a' onClick={handleClick}>
    Show
</button>
// ...
<button className='btn-b' onClick={handleSubmit}>
    Submit
</button>

6.4. Gunakan Fungsi Anak Panah untuk Satu pelapik

Sebaliknya:

enum A {
  x, y
}

Tulis ini:

var A;
(function (A) {
    A[A["x"] = 0] = "x";
    A[A["y"] = 1] = "y";
})(A || (A = {}));

6.5. Jangan Gunakan Kelas untuk Objek Sangat Mudah

Sebaliknya:

namespace A {
  export let x = 1
}

Tulis ini:

var A;
(function (A) {
    A.x = 1;
})(A || (A = {}));

Anda juga boleh membekukan objek untuk melindungi sifatnya daripada perubahan.

7. Periksa Bundle secara kerap

Bagi setiap pengikat, terdapat alat untuk menggambarkan kandungannya, seperti penganalisis webpack-bundle untuk pek web dan penganalisis vite-bundle untuk Vite. Alat seperti ini membantu anda mengenal pasti isu biasa dengan himpunan anda:

  • Perpustakaan menggunakan jumlah ruang yang tidak seimbang — mungkin sudah tiba masanya untuk berhijrah atau menaik taraf?
  • Dua perpustakaan serupa digunakan di bahagian berlainan projek anda — bolehkah anda menyatukan dan menggunakan hanya satu?
  • Fail besar wujud dalam berkas anda tetapi hanya diakses oleh halaman yang dilawati oleh 0.5% pengguna (cth., teks lesen) — mungkin anda boleh membahagikan berkas menggunakan import dinamik()?

Selain alatan ini, adalah idea yang baik untuk sekali-sekala membaca berkas secara manual untuk mengesan penyelewengan. Sebagai contoh, anda mungkin menemui pembantu ES5 dalam berkas ES6 atau pembantu CJS dalam projek ESM disebabkan salah konfigurasi TypeScript. Masalah ini mungkin tidak ditangkap oleh alatan automatik tetapi masih boleh meningkatkan masa pemuatan dan berpotensi menyebabkan kerugian kepada aset anda yang paling berharga — perhatian pengguna.


Terima kasih kerana membaca. Selamat mengekod!

Atas ialah kandungan terperinci Petua ratikal untuk Meminimumkan Saiz Bundle JavaScript Anda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1488
72
Bagaimana membuat permintaan HTTP di node.js? Bagaimana membuat permintaan HTTP di node.js? Jul 13, 2025 am 02:18 AM

Terdapat tiga cara biasa untuk memulakan permintaan HTTP dalam node.js: Gunakan modul terbina dalam, axios, dan nod-fetch. 1. Gunakan modul HTTP/HTTPS terbina dalam tanpa kebergantungan, yang sesuai untuk senario asas, tetapi memerlukan pemprosesan manual jahitan data dan pemantauan ralat, seperti menggunakan https.get () untuk mendapatkan data atau menghantar permintaan pos melalui .write (); 2.AXIOS adalah perpustakaan pihak ketiga berdasarkan janji. Ia mempunyai sintaks ringkas dan fungsi yang kuat, menyokong async/menunggu, penukaran JSON automatik, pemintas, dan lain -lain. Adalah disyorkan untuk memudahkan operasi permintaan tak segerak; 3.Node-Fetch menyediakan gaya yang serupa dengan pengambilan penyemak imbas, berdasarkan janji dan sintaks mudah

Jenis Data JavaScript: Rujukan primitif vs Jenis Data JavaScript: Rujukan primitif vs Jul 13, 2025 am 02:43 AM

Jenis data JavaScript dibahagikan kepada jenis primitif dan jenis rujukan. Jenis primitif termasuk rentetan, nombor, boolean, null, undefined, dan simbol. Nilai -nilai tidak berubah dan salinan disalin apabila memberikan nilai, jadi mereka tidak mempengaruhi satu sama lain; Jenis rujukan seperti objek, tatasusunan dan fungsi menyimpan alamat memori, dan pembolehubah menunjuk objek yang sama akan mempengaruhi satu sama lain. Typeof dan Instanceof boleh digunakan untuk menentukan jenis, tetapi memberi perhatian kepada isu -isu sejarah TypeOfNull. Memahami kedua -dua jenis perbezaan ini dapat membantu menulis kod yang lebih stabil dan boleh dipercayai.

Objek Masa JavaScript, seseorang membina eactexe, laman web lebih cepat di Google Chrome, dll. Objek Masa JavaScript, seseorang membina eactexe, laman web lebih cepat di Google Chrome, dll. Jul 08, 2025 pm 02:27 PM

Helo, pemaju JavaScript! Selamat datang ke berita JavaScript minggu ini! Minggu ini kami akan memberi tumpuan kepada: Pertikaian tanda dagangan Oracle dengan Deno, objek masa JavaScript baru disokong oleh pelayar, kemas kini Google Chrome, dan beberapa alat pemaju yang kuat. Mari mulakan! Pertikaian tanda dagangan Oracle dengan percubaan Deno Oracle untuk mendaftarkan tanda dagangan "JavaScript" telah menyebabkan kontroversi. Ryan Dahl, pencipta Node.js dan Deno, telah memfailkan petisyen untuk membatalkan tanda dagangan, dan dia percaya bahawa JavaScript adalah standard terbuka dan tidak boleh digunakan oleh Oracle

Apakah API cache dan bagaimana ia digunakan dengan pekerja perkhidmatan? Apakah API cache dan bagaimana ia digunakan dengan pekerja perkhidmatan? Jul 08, 2025 am 02:43 AM

CACHEAPI adalah alat yang disediakan oleh penyemak imbas kepada permintaan rangkaian cache, yang sering digunakan bersempena dengan ServiceWorker untuk meningkatkan prestasi laman web dan pengalaman luar talian. 1. Ia membolehkan pemaju menyimpan sumber secara manual seperti skrip, helaian gaya, gambar, dan lain -lain; 2. Ia boleh memadankan tindak balas cache mengikut permintaan; 3. Ia menyokong memotong cache tertentu atau membersihkan seluruh cache; 4. Ia boleh melaksanakan keutamaan cache atau strategi keutamaan rangkaian melalui perkhidmatan pekerja yang mendengar acara mengambil; 5. Ia sering digunakan untuk sokongan luar talian, mempercepat kelajuan akses berulang, sumber utama dan kandungan kemas kini latar belakang; 6. Apabila menggunakannya, anda perlu memberi perhatian kepada kawalan versi cache, sekatan penyimpanan dan perbezaan dari mekanisme caching HTTP.

Mengendalikan Janji: Chaining, Pengendalian Kesalahan, dan Janji Gabungan di JavaScript Mengendalikan Janji: Chaining, Pengendalian Kesalahan, dan Janji Gabungan di JavaScript Jul 08, 2025 am 02:40 AM

Janji adalah mekanisme teras untuk mengendalikan operasi tak segerak dalam JavaScript. Memahami panggilan rantaian, pengendalian ralat dan gabungan adalah kunci untuk menguasai aplikasi mereka. 1. Panggilan rantai mengembalikan janji baru melalui .then () untuk merealisasikan persamaan proses tak segerak. Setiap .then () menerima hasil sebelumnya dan boleh mengembalikan nilai atau janji; 2. Pengendalian ralat harus menggunakan .catch () untuk menangkap pengecualian untuk mengelakkan kegagalan senyap, dan boleh mengembalikan nilai lalai dalam tangkapan untuk meneruskan proses; 3. Gabungan seperti janji.all () (berjaya hanya berjaya selepas semua kejayaan), janji.race () (penyempurnaan pertama dikembalikan) dan janji.allsettled () (menunggu semua penyelesaian)

Memanfaatkan array.prototype Kaedah untuk manipulasi data dalam javascript Memanfaatkan array.prototype Kaedah untuk manipulasi data dalam javascript Jul 06, 2025 am 02:36 AM

Kaedah terbina dalam JavaScript seperti .map (), .filter () dan .reduce () dapat memudahkan pemprosesan data; 1) .map () digunakan untuk menukar elemen satu hingga satu untuk menghasilkan tatasusunan baru; 2) .filter () digunakan untuk menapis elemen mengikut keadaan; 3) .reduce () digunakan untuk mengagregatkan data sebagai nilai tunggal; Penyalahgunaan harus dielakkan apabila digunakan, mengakibatkan kesan sampingan atau masalah prestasi.

JS Roundup: menyelam jauh ke dalam gelung acara JavaScript JS Roundup: menyelam jauh ke dalam gelung acara JavaScript Jul 08, 2025 am 02:24 AM

Gelung acara JavaScript menguruskan operasi tak segerak dengan menyelaraskan susunan panggilan, webapis, dan barisan tugas. 1. Stack panggilan melaksanakan kod segerak, dan ketika menghadapi tugas -tugas yang tidak segerak, ia diserahkan kepada Webapi untuk diproses; 2. Selepas Webapi melengkapkan tugas di latar belakang, ia meletakkan panggil balik ke dalam barisan yang sama (tugas makro atau tugas mikro); 3. Loop acara memeriksa sama ada timbunan panggilan kosong. Jika ia kosong, panggilan balik diambil dari barisan dan ditolak ke dalam tumpukan panggilan untuk pelaksanaan; 4. Tugas -tugas mikro (seperti janji. 5. Memahami gelung acara membantu mengelakkan menyekat benang utama dan mengoptimumkan pesanan pelaksanaan kod.

Memahami acara menggelegak dan menangkap dalam acara DOM JavaScript Memahami acara menggelegak dan menangkap dalam acara DOM JavaScript Jul 08, 2025 am 02:36 AM

Gelembung peristiwa menyebarkan dari elemen sasaran ke luar ke nod nenek moyang, sementara penangkapan peristiwa menyebarkan dari lapisan luar ke dalam ke elemen sasaran. 1. Bubbles Acara: Selepas mengklik elemen kanak -kanak, acara itu mencetuskan pendengar elemen induk ke atas. Sebagai contoh, selepas mengklik butang, ia mengeluarkan anak -anak terlebih dahulu, dan kemudian ParentClicked. 2. Tangkap Acara: Tetapkan parameter ketiga menjadi benar, supaya pendengar dilaksanakan di peringkat penangkapan, seperti mencetuskan pendengar penangkapan elemen induk sebelum mengklik butang. 3. Penggunaan praktikal termasuk pengurusan bersatu peristiwa elemen kanak -kanak, pemprosesan pemintasan dan pengoptimuman prestasi. 4. Aliran acara DOM dibahagikan kepada tiga peringkat: menangkap, sasaran dan gelembung, dan pendengar lalai dilaksanakan di peringkat gelembung.

See all articles