"Sejarah bukan masa lalu, sejarah dipentaskan. Dengan perkembangan cepat W3C dan browser, pengembangan modular front-end secara bertahap akan menjadi infrastruktur. Semuanya pada akhirnya akan menjadi sejarah, dan masa depan akan lebih baik." - Saya pribadi setuju dengan paragraf terakhir teks asli Yu Bo. Karena kita berbicara tentang "masa depan", saya pribadi percaya bahwa jika modul JS front-end terus berkembang, format modulnya kemungkinan akan menjadi spesifikasi standar untuk Web di masa depan dan menghasilkan beberapa metode implementasi. Sama seperti format JSON, akhirnya menjadi standar dan diimplementasikan secara asli oleh browser.
Siapa yang memiliki standar terbaik untuk modul asinkron untuk menjadi masa depan? SEAJS mengikuti spesifikasi CMD, NeedJS mengikuti spesifikasi AMD, mari kita mulai dengan dua format yang berbeda ini.
Cmd
Metode Deklarasi Ketergantungan Modul CMD:
Salinan kode adalah sebagai berikut:
define (function (membutuhkan) {
var a = membutuhkan ('./ a');
var b = membutuhkan ('./ B');
// lebih banyak kode ..
})
Ketergantungan CMD dideklarasikan di dekatnya dan dinyatakan melalui metode internal membutuhkan. Namun, karena ini adalah modul asinkron, loader perlu memuat modul ini terlebih dahulu, jadi sebelum modul benar -benar digunakan, semua dependensi dalam modul perlu diekstraksi. Apakah itu ekstraksi loader atau pra-ekstrak melalui alat otomatis, format deklarasi ketergantungan CMD ini hanya dapat diimplementasikan melalui analisis statis, yang merupakan kelemahan CMD.
Kerugian spesifikasi CMD
Tidak dapat secara langsung kompres: Persyaratan adalah variabel lokal, yang berarti tidak dapat dikompresi secara langsung melalui alat kompresi. Jika variabel yang membutuhkan diganti, alat pemuat dan otomatisasi tidak akan dapat memperoleh dependensi modul.
Modul memiliki konvensi tambahan: parameter jalur tidak dapat berupa operasi string, dan variabel tidak dapat digunakan sebagai gantinya, jika tidak, alat pemuat dan otomatisasi tidak dapat mengekstrak jalur dengan benar.
Konvensi di luar spesifikasi berarti lebih banyak dokumentasi kecuali mereka juga merupakan bagian dari spesifikasi.
CATATAN: Implementasi analisis statis SEAJS adalah menggunakan bagian persyaratan ekstraksi reguler untuk mendapatkan jalur modul ketergantungan.
AMD
Metode Deklarasi Ketergantungan Modul AMD:
Salinan kode adalah sebagai berikut:
define (['./ a', './b'], function (a, b) {
// lebih banyak kode ..
})
Ketergantungan AMD dinyatakan sebelumnya. Keuntungan dari keuntungan ini adalah bahwa ketergantungan tidak memerlukan analisis statis. Baik loader dan alat otomatisasi dapat secara langsung mendapatkan dependensi. Definisi spesifikasi bisa lebih sederhana, yang berarti bahwa implementasi yang lebih kuat dapat dihasilkan, yang bermanfaat bagi alat analisis loader dan otomatisasi.
Kerugian spesifikasi AMD
Deklarasi Dependensi Advance tidak begitu ramah dalam penulisan kode.
Ada perbedaan tertentu antara modul di dalam dan modul nodeJs.
Masalah kedua perlu dijelaskan secara rinci. Faktanya, baik modul asinkron CMD maupun AMD tidak dapat konsisten dengan spesifikasi modul sinkronisasi (modul NodeJS), hanya yang lebih seperti modul sinkronisasi daripada siapa. Untuk mengonversi AMD ke modul sinkronisasi, selain menghapus paket fungsi define, Anda perlu menggunakan kebutuhan di kepala untuk menyatakan ketergantungan, sementara CMD hanya perlu menghapus paket fungsi define.
Meringkaskan
Dalam hal spesifikasi, AMD lebih sederhana dan ketat, dan memiliki penerapan yang lebih luas. Dengan promosi yang kuat dari kebutuhan, itu hampir menjadi standar modul asinkron de facto di luar negeri, dan perpustakaan utama telah secara berturut -turut mendukung spesifikasi AMD.
Tetapi dari Seajs dan CMD, kami juga telah melakukan banyak hal baik:
1. Gaya pernyataan ketergantungan yang relatif alami
2. Kesadaran internal kecil dan indah
3. Desain fungsi perifer yang cermat
4. Dukungan Komunitas Cina yang Lebih Baik
Jika memungkinkan, saya berharap dapat melihat Seajs juga mendukung AMD, dan kebahagiaan tertinggi pengembang adalah mayoritas pengembang.