Ditulis oleh Ivy Walobwa✏️
Apabila apl web anda semakin rumit, menjadi penting untuk menguasai seni nyahpepijat.
Penyahpepijatan JavaScript yang berkesan melibatkan lebih daripada sekadar membetulkan ralat. Ia memerlukan pemahaman tentang cara kod anda berfungsi di bawah hud untuk memastikan apl anda berjalan lancar dan menyampaikan pengalaman pengguna yang terbaik.
Kod terkecil, iaitu versi kod anda yang menjangkau pengguna dalam pengeluaran, dioptimumkan untuk prestasi. Walau bagaimanapun, kod yang dikecilkan boleh menjadi mimpi ngeri untuk nyahpepijat. Apabila pengguna menghadapi ralat, menghasilkan semula dan mendiagnosis isu dalam kod yang dikecilkan selalunya mencabar.
Walau bagaimanapun, dengan alatan yang betul, penyahpepijatan JavaScript boleh menjadi lebih mudah. Artikel ini akan meneroka cara memanfaatkan peta sumber untuk menyahpepijat kod diperkecil dan menyelami teknik lain menggunakan Chrome DevTools untuk mengenal pasti dan menyelesaikan isu dalam apl web anda dengan cekap.
Contoh aplikasi
Kami akan mengusahakan apl mudah yang menambah kiraan dan log masuk ke konsol. Apl ini menunjukkan cara kod yang dikecilkan boleh menjadikan penyahpepijatan rumit dan cara peta sumber boleh membantu memudahkan proses.
Buat fail .js di bawah dan tambahkan coretan kod seperti yang ditunjukkan:
1. src/counterCache.js
export const countCache = { previousCount: 0, currentCount: 0, totalCount: 0 } export function updateCache(currentCount, previousCount) { countCache.currentCount = currentCount; countCache.previousCount = previousCount; c ountCache.totalCount = countCache.totalCount + countCache.currentCount; }
2.src/counter.js:
import { updateCache } from './counterCache.js'; let count = 0; export function incrementCounter() { count += 1; const previousCount = count; updateCache(count, previousCount); }
3.src/index.js:
import { incrementCounter } from './counter'; import { countCache } from './counterCache'; const button = document.createElement('button'); const previousElement = document.getElementById('previous'); const currentElement = document.getElementById('current'); const totalElement = document.getElementById('total'); button.innerText = 'Click me'; document.body.appendChild(button); button.addEventListener('click', () => { incrementCounter(); previousElement.innerText = countCache.previousCount; currentElement.innerText = countCache.currentCount; totalElement.innerText = countCache.total(); });
Dalam fail package.json anda, tambahkan pakej webpack seperti yang ditunjukkan di bawah kemudian jalankan npm i untuk memasangnya. Kami akan menggunakan webpack sebagai sebahagian daripada proses binaan untuk menjana kod diperkecil untuk pengeluaran:
"devDependencies": { "webpack": "^5.96.1", "webpack-cli": "^5.1.4" }
Untuk mendayakan pengurangan kod, tambahkan fail webpack.config.js dengan coretan berikut. Menetapkan mod kepada pengeluaran memberitahu pek web untuk menggunakan pengoptimuman seperti pengubahsuaian:
const path = require('path'); module.exports = { mode: 'production', // Enables optimizations like minification and tree-shaking entry: './src/index.js', // Specifies the entry point of your application output: { path: path.resolve(__dirname, 'dist'),// Defines the output directory for bundled files filename: 'bundle.js',// Specifies the name of the bundled file }, };
Sekarang jalankan npx webpack untuk menggabungkan dan memperkecilkan kod anda. Fail dist/bundle.js dijana dengan kandungan seperti yang ditunjukkan di bawah. Minification mengaburkan nama pembolehubah dan fungsi serta mengalih keluar aksara yang tidak diperlukan seperti ruang kosong, ulasan dan kod yang tidak digunakan, menjadikan fail output lebih kecil dan lebih cepat untuk dimuatkan:
(()=>{"use strict";const t={};let e=0;const n=document.createElement("button"),o=document.getElementById("previous"),u=document.getElementById("current"),r=document.getElementById("total");n.innerText="Click me",document.body.appendChild(n),n.addEventListener("click",(()=>{var n,c;e+=1,n=e,c=e,t.currentCount=n,t.previousCount=c,t.totalCount=t.totalCount||0+t.currentCount,o.innerText=t.previousCount,u.innerText=t.currentCount,r.innerText=t.total()}))})();
Seterusnya, kemas kini fail index.html untuk merujuk output yang digabungkan, memastikan aplikasi anda menggunakan kod yang dikecilkan:
<meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Web Debugging Example</title> <link rel="stylesheet" href="styles.css"> <h1 id="Web-Debug-App">Web Debug App</h1> <p>Check console for bug</p>
Previous count | Current count | Total count |
---|---|---|
Finally, run the app and check the console after clicking the button. To preview the app locally, you can use the Live Server extension in VS Code: The error in the console, t.total is not a function, is difficult to interpret. Clicking on the file in the console does not help pinpoint the issue due to the compact and obfuscated nature of minified code. Identifying the root cause of such an error in a large codebase can be frustrating and time-consuming, as the minified code obscures the original logic and context. 8 JavaScript debugging strategies for web appsLet’s demonstrate eight methods to help make JavaScript debugging a bit easier: 1. Source mapsSource maps are files that map your minified code back to the original source code. They make debugging easier and help investigate issues in production. The file names of source maps end with .map. To generate source maps using webpack, update the webpack.config.js file as follows: The devtool: 'source-map' or devtool: 'eval-source-map' line tells webpack to generate an external .map file which maps the minified code back to your original source code. The source map file URL is also added to the minified code in the bundle.js file. Now run npx webpack. The .map file will generate alongside your minified bundle. Serve the application using a local server, and open it in an Incognito browser window. This prevents browser extensions and cached files from interfering with your debugging process. With source maps generated, the following observations are made:
The exact code and file causing the bug are easy to identify using source maps: With the clear error above, we are able to fix the error and access the correct property on countCache. Our guide on how to use Chrome DevTools should provide a great start. To open the Developer resources tab, click on the More icon, then More tools then Developer resources. This tab allows you to view the source map load status and even load source maps manually: The code snippet below fixes the bug on the console. Update your code, then run npx webpack to compile the changes. Once completed, serve the application and view the updated output in the table: totalElement.innerText = countCache.totalCount; Mengklik butang pada masa ini mengemas kini kiraan sebelumnya, kiraan semasa dan jumlah pada jadual. Kiraan sebelumnya sepatutnya mengembalikan nilai kiraan sebelumnya dan jumlah kiraan adalah untuk mengembalikan jumlah semua nilai kiraan. Pada masa ini, kiraan sebelumnya memaparkan kiraan semasa manakala jumlah kiraan tersekat pada satu. Dalam bahagian seterusnya, kami akan meneroka teknik penyahpepijatan JavaScript tambahan, seperti menggunakan titik putus dan melangkah melalui kod, untuk mengenal pasti dan menyelesaikan isu ini: 2. Titik putusTitik putus membolehkan anda menjeda pelaksanaan kod anda pada baris tertentu, membantu anda memeriksa pembolehubah, menilai ungkapan dan memahami aliran kod. Bergantung pada matlamat anda, terdapat titik putus yang berbeza yang boleh anda gunakan. Contohnya:
Dalam aplikasi sampel kami, kami akan menggunakan titik putus pada fungsi IncrementCounter. Pada panel Sumber, buka fail counter.js dan klik di sebelah kiri baris enam. Ini menetapkan titik putus baris kod selepas kiraan ditingkatkan: Kami akan menetapkan satu lagi titik putus pada baris lima dan mengeditnya. Untuk mengedit titik putus kami, kami akan klik kanan pada bahagian yang diserlahkan dan kemudian klik pada Edit titik putus: Kami akan menetapkan jenis titik putus kepada Titik Log, kemudian masukkan mesej untuk dilog masuk ke konsol: Dengan mengklik butang, aplikasi kami berhenti seketika pada titik putus baris dan mencetak log nyahpepijat pada konsol daripada set Logpoint: Daripada imej kita boleh melihat bahagian berikut:
Dengan ini, kami boleh nyahpepijat apl kami dengan lebih lanjut. 3. Panel skoppanel skop boleh berkesan untuk penyahpepijatan JavaScript, kerana ia membolehkan anda melihat pembolehubah daripada sumber asal: Kita boleh melihat pembolehubah skop berikut:
Daripada panel skop dan titik putus titik log, kita dapat melihat bahawa kiraan semasa ialah satu manakala kiraan sebelum kenaikan ialah sifar. Oleh itu, kita perlu menyimpan kiraan sebelum kenaikan seperti kiraan sebelumnya. 4. Melangkah melalui kod (_s_tep into, step over, step out)Melangkah melalui kod anda melibatkan menavigasi program dengan cara yang berbeza semasa penyahpepijatan JavaScript:
Anda boleh menggunakan kawalan nyahpepijat untuk melangkah melalui kod anda. Kawalan Langkah membolehkan anda menjalankan kod anda, satu baris pada satu masa. Mengklik pada Langkah akan melaksanakan baris enam dan beralih ke baris tujuh. Perhatikan bagaimana nilai previousCount berubah dalam skop: Kawalan Step over membolehkan anda melaksanakan fungsi tanpa melaluinya baris demi baris: Kawalan Langkah ke membolehkan anda pergi ke fungsi. Dalam fungsi, anda boleh melangkah melalui baris kod demi baris atau Langkah keluar fungsi seperti yang ditunjukkan di bawah. Melangkah keluar dari fungsi akan menyelesaikan pelaksanaan baris yang tinggal: Untuk menyelesaikan isu kami, kami akan mengemas kini kod seperti yang ditunjukkan di bawah. Ini kini memaparkan kiraan sebelumnya pada jadual dengan betul: export const countCache = { previousCount: 0, currentCount: 0, totalCount: 0 } export function updateCache(currentCount, previousCount) { countCache.currentCount = currentCount; countCache.previousCount = previousCount; c ountCache.totalCount = countCache.totalCount + countCache.currentCount; } 5. Timbunan panggilanTimbunan panggilan menunjukkan urutan panggilan fungsi yang membawa kepada titik semasa dalam kod. Tambah titik putus baharu dalam fail counterCache.js seperti yang ditunjukkan, kemudian klik butang. Perhatikan panel tindanan panggilan: Terdapat tiga panggilan fungsi yang dibuat apabila apl melaksanakan baris enam counterCache.js. Untuk melihat aliran mana-mana fungsi dalam tindanan, anda boleh memulakan semula pelaksanaannya menggunakan Mulakan semula bingkai, seperti ditunjukkan di bawah: 6. Mengabaikan skripApabila menyahpepijat, anda mungkin ingin mengabaikan skrip tertentu semasa aliran kerja anda. Ini membantu melangkau kerumitan kod daripada perpustakaan atau penjana kod. Dalam kes kami, kami mahu mengabaikan skrip counter.js semasa menyahpepijat. Pada tab Halaman, klik kanan pada fail untuk diabaikan dan tambahkan skrip pada senarai abaikan: Menjalankan apl dan menjeda pada titik putus, kita dapat melihat fungsi IncrementCounter kini diabaikan pada timbunan panggilan. Anda boleh menyembunyikan atau menunjukkan bingkai yang diabaikan: Anda boleh mengumpulkan fail anda dalam tab Halaman untuk navigasi lebih mudah seperti yang ditunjukkan dalam imej di bawah: 7. Tonton ekspresiEkspresi jam tangan membolehkan anda menjejak pembolehubah atau ungkapan tertentu semasa kod anda dilaksanakan, membantu anda memantau perubahan dalam masa nyata. Anda boleh menambah ungkapan seperti countCache untuk memantau nilai semasa anda melangkah melalui kod: 8. Menyahpepijat coretan kodUntuk cuba membetulkan pepijat dengan jumlah kiraan, anda boleh menjalankan coretan kod pada konsol untuk memahami ralat logik. Apabila menyahpepijat kod yang anda jalankan berulang kali pada konsol, anda boleh menggunakan Snippet. Pada tab Snippet, tambahkan contoh skrip nyahpepijat, simpan skrip kemudian klik Enter untuk menjalankan skrip: Anda boleh melihat bahawa ungkapan dengan pepijat perlu disusun semula untuk menyelesaikan isu: export const countCache = { previousCount: 0, currentCount: 0, totalCount: 0 } export function updateCache(currentCount, previousCount) { countCache.currentCount = currentCount; countCache.previousCount = previousCount; c ountCache.totalCount = countCache.totalCount + countCache.currentCount; } Anda boleh meneroka sumber tambahan untuk menyahpepijat apl web seperti artikel ini tentang menyahpepijat apl React dengan React DevTools, yang menawarkan cerapan berharga dalam menyahpepijat aplikasi berasaskan React. Selain itu, panduan untuk menyahpepijat Node.js dengan Chrome DevTools ini menyediakan petua untuk menyahpepijat JavaScript sisi pelayan menggunakan pemerhati dan ciri DevTools lanjutan yang lain. Sumber ini boleh melengkapkan teknik yang dibincangkan di sini dan meluaskan pemahaman anda tentang penyahpepijatan apl web. KesimpulanTutorial ini meneroka penyahpepijatan peta sumber busing kod terkecil dan Chrome DevTools. Dengan menjana peta sumber, kami memetakan kod yang dikecilkan kembali ke sumber asalnya, menjadikannya lebih mudah untuk nyahpepijat apl web kami. Chrome DevTools mempertingkatkan lagi proses penyahpepijatan JavaScript dengan kaedah seperti titik putus, melangkah melalui kod, ekspresi jam tangan dan banyak lagi. Dengan alatan ini, pembangun boleh nyahpepijat dan mengoptimumkan aplikasi mereka dengan cekap, walaupun semasa berurusan dengan pangkalan kod yang kompleks dan diperkecilkan. Kod lengkap untuk projek ini boleh didapati di GitHub. Sediakan dengan penjejakan ralat moden LogRocket dalam beberapa minit:
NPM: import { updateCache } from './counterCache.js'; let count = 0; export function incrementCounter() { count += 1; const previousCount = count; updateCache(count, previousCount); } Tag Skrip: import { incrementCounter } from './counter'; import { countCache } from './counterCache'; const button = document.createElement('button'); const previousElement = document.getElementById('previous'); const currentElement = document.getElementById('current'); const totalElement = document.getElementById('total'); button.innerText = 'Click me'; document.body.appendChild(button); button.addEventListener('click', () => { incrementCounter(); previousElement.innerText = countCache.previousCount; currentElement.innerText = countCache.currentCount; totalElement.innerText = countCache.total(); }); 3.(Pilihan) Pasang pemalam untuk penyepaduan yang lebih mendalam dengan timbunan anda:
Mulakan sekarang. |
Atas ialah kandungan terperinci Cara menguasai debugging JavaScript untuk apl web. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Aplikasi JavaScript di dunia nyata termasuk pengaturcaraan sisi pelayan, pembangunan aplikasi mudah alih dan Internet of Things Control: 1. Pengaturcaraan sisi pelayan direalisasikan melalui node.js, sesuai untuk pemprosesan permintaan serentak yang tinggi. 2. Pembangunan aplikasi mudah alih dijalankan melalui reaktnatif dan menyokong penggunaan silang platform. 3. Digunakan untuk kawalan peranti IoT melalui Perpustakaan Johnny-Five, sesuai untuk interaksi perkakasan.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa