de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 cprcrack
cprcrack
Question

Dalam Javascript, lebih mahal untuk menggunakan try-catch blok bahkan jika pengecualian ini tidak pernah dibuang?

Itu "lambat" untuk menggunakan beberapa try-catch blok ketika tidak ada pengecualian dilemparkan di salah satu dari mereka? Pertanyaan saya adalah sama seperti yang ini, tetapi untuk Javascript.

Misalkan saya memiliki 20 fungsi yang telah mencoba menangkap blok mereka. Dan fungsi lain yang memanggil setiap orang 20 fungsi. Tidak satupun dari mereka akan melempar pengecualian. Saya akan mengeksekusi kode yang lebih lambat atau melakukan jauh lebih buruk karena try-catch blok?

52 2013-11-01T13:39:25+00:00 3
 Community
Community
Pertanyaan edit 23 Mei 2017 в 12:17
Pemrograman
exception
javascript
performance
exception-handling
try-catch
Solution / Answer
 Esailija
Esailija
1 November 2013 в 2:34
2013-11-01T14:34:43+00:00
Lebih
Sumber
Sunting
#22688425

Yang anda lakukan khas CRUD kode UI? Penggunaan mencoba menangkap, gunakan loop yang pergi ke 10000 tanpa alasan ditaburi dalam kode anda, neraka, menggunakan sudut/bara - anda tidak akan melihat adanya masalah kinerja.

Jika anda melakukan tingkat rendah perpustakaan, fisika, simulasi, permainan, server-side dll maka tidak pernah melemparkan try-catch blok tidak't biasanya peduli sama sekali tapi masalahnya adalah bahwa V8 didn't mendukung dalam mengoptimalkan compiler sampai versi 6 dari mesin, agar seluruh fungsi yang berisi bahwa sintaksis mengandung mencoba menangkap tidak akan optimal. Anda dapat dengan mudah mengatasi hal ini meskipun, dengan membuat fungsi pembantu seperti tryCatch:

function tryCatch(fun) {
    try {
        return fun();
    }
    catch(e) {
        tryCatch.errorObj.e = e;
        return tryCatch.errorObj;
    }
}
tryCatch.errorObj = {e: null};

var result = tryCatch(someFunctionThatCouldThrow);
if(result === tryCatch.errorObj) {
    //The function threw
    var e = result.e;
}
else {
    //result is the returned value
}

Setelah V8 versi 6 (dikirim dengan Node 8.3 dan Chrome terbaru), kinerja dari kode di dalam coba-menangkap adalah sama seperti yang normal kode.

52
0
 asthomas
asthomas
27 Desember 2015 в 10:33
2015-12-27T22:33:00+00:00
Lebih
Sumber
Sunting
#22688426

Asli pertanyaan yang diajukan tentang biaya try/catch ketika kesalahan itu tidak dilemparkan. Pasti ada dampak ketika melindungi blok kode dengan mencoba menangkap, namun dampak dari try/catch akan lenyap dengan cepat sebagai kode dilindungi bahkan menjadi sedikit kompleks.

Pertimbangkan tes ini: http://jsperf.com/try-catch-performance-jls/2

Sederhana increment berjalan di 356,800,000 iterasi per detik Sama kenaikan hanya coba/tangkap adalah 93,500,000 iterasi per detik. Yang's pada overhead dari 75% karena try/catch. TAPI, sepele panggilan fungsi berjalan pada 112,200,000 iterasi per detik. 2 sepele fungsi panggilan dijalankan pada 61,300,000 iterasi per detik.

Un dilaksanakan coba di tes ini membutuhkan sedikit waktu lebih dari satu sepele fungsi panggilan. Yang's hampir kecepatan penalti yang penting kecuali dalam batin-paling loop dari sesuatu yang benar-benar intens seperti FFT.

Kasus yang ingin anda hindari adalah kasus di mana pengecualian adalah benar-benar dibuang. Yang sangat lambat, seperti yang ditunjukkan pada link di atas.

Edit: angka-angka untuk Chrome di komputer saya. Di Firefox tidak ada perbedaan yang signifikan antara unexercised mencoba dan tidak ada perlindungan sama sekali. Ada's pada dasarnya nol penalti untuk menggunakan try/catch jika tidak ada pengecualian dilemparkan.

 asthomas
asthomas
Jawaban edit 27 Desember 2015 в 10:48
38
0
 roland
roland
1 November 2013 в 2:05
2013-11-01T14:05:32+00:00
Lebih
Sumber
Sunting
#22688424

Coba-menangkap block dikatakan mahal. Namun jika kinerja yang penting adalah tidak menjadi masalah, menggunakan hal ini tidak selalu menjadi perhatian.

Hukuman IMO adalah:

  • pembacaan
  • tidak pantas dalam banyak kasus
  • tidak efektif ketika datang untuk async pemrograman

Mudah dibaca: pipa kode anda dengan banyak mencoba menangkap jelek dan mengganggu

tidak pantas: it's merupakan ide yang buruk untuk menyisipkan blok tersebut jika kode anda tidak tunduk pada pengecualian-kecelakaan. Masukkan hanya jika anda mengharapkan kegagalan dalam kode anda. Lihat topik berikut: https://stackoverflow.com/questions/1722964/when-to-use-try-catch-blocks

Async: try-catch blok sinkron dan tidak efektif ketika datang untuk async pemrograman. Selama ajax permintaan anda menangani kedua kesalahan dan sukses acara khusus di callback. Tidak perlu untuk coba-menangkap.

Semoga ini bisa membantu,

R.

 Community
Community
Jawaban edit 23 Mei 2017 в 12:34
8
0
Related communities 1
JavaScript Indonesia
JavaScript Indonesia
14 549 pengguna
Grup JavaScript yang membahas JavaScript, framework JS, dan Node JS secara universal. Cek Pinned Message untuk keterangan lebih lanjut. Komunitas ReactJS: https://t.me/react_idn
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
UbiBot UK
Terdaftar 14 jam yang lalu
2
Галина Утяшова
Terdaftar 1 hari yang lalu
3
Asilbek Qadamboyev
Terdaftar 4 hari yang lalu
4
Akshit Mehta
Terdaftar 1 minggu yang lalu
5
me you
Terdaftar 1 minggu yang lalu
ID
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi