Dalam istilah komputer, new Date()dan regular expressionsolusinya lambat! Jika Anda menginginkan one-liner super cepat (dan super-samar), coba yang satu ini (anggap mdalam Jan=1format). Saya terus mencoba berbagai perubahan kode untuk mendapatkan kinerja terbaik.
Versi tercepat saya saat ini :
Setelah melihat pertanyaan terkait ini , periksa tahun kabisat menggunakan operator bitwise (kecepatan luar biasa) dan menemukan apa yang diwakili bilangan ajaib 25 & 15, saya telah menghasilkan hibrida jawaban yang dioptimalkan ini:
function getDaysInMonth(m, y) {
return m===2 ? y & 3 || !(y%25) && y & 15 ? 28 : 29 : 30 + (m+(m>>3)&1);
}
Mengingat bit-shifting ini jelas mengasumsikan bahwa m& yparameter Anda sama-sama bilangan bulat, karena angka yang lewat sebagai string akan menghasilkan hasil yang aneh.
JSFiddle: http://jsfiddle.net/TrueBlueAussie/H89X3/22/
Hasil JSPerf: http://jsperf.com/days-in-month-head-to-head/5
Untuk beberapa alasan, (m+(m>>3)&1)lebih efisien daripada (5546>>m&1)di hampir semua browser.
Satu-satunya kompetisi nyata untuk kecepatan adalah dari @GitaarLab, jadi saya telah membuat JSPerf head-to-head untuk kami uji: http://jsperf.com/days-in-month-head-to-head/5
Ia bekerja berdasarkan jawaban tahun kabisat saya di sini: javascript untuk menemukan tahun kabisat jawaban ini di sini Tahun kabisat periksa menggunakan operator bitwise (kecepatan luar biasa) serta logika biner berikut.
Pelajaran cepat dalam bulan biner:
Jika Anda mengartikan indeks bulan yang diinginkan (Jan = 1) dalam biner, Anda akan melihat bahwa bulan dengan 31 hari memiliki bit 3 clear dan bit 0 set, atau bit 3 set dan bit 0 clear.
Jan = 1 = 0001 : 31 days
Feb = 2 = 0010
Mar = 3 = 0011 : 31 days
Apr = 4 = 0100
May = 5 = 0101 : 31 days
Jun = 6 = 0110
Jul = 7 = 0111 : 31 days
Aug = 8 = 1000 : 31 days
Sep = 9 = 1001
Oct = 10 = 1010 : 31 days
Nov = 11 = 1011
Dec = 12 = 1100 : 31 days
Itu berarti Anda dapat menggeser nilai 3 tempat dengan >> 3, XOR bit dengan yang asli ^ mdan melihat apakah hasilnya menggunakan bit1 atau 0 dalam posisi 0& 1 . Catatan: Ternyata +sedikit lebih cepat daripada XOR ( ^) dan (m >> 3) + mmemberikan hasil yang sama di bit 0.
Hasil JSPerf : http://jsperf.com/days-in-month-perf-test/6