Masalah
Jawaban ini telah dijawab sebelumnya tetapi lama dan tidak mutakhir. Saya memiliki lebih dari 2000 baris kode dalam satu file, dan seperti yang kita semua tahu ini adalah praktik yang buruk, terutama ketika saya melihat-lihat kode atau menambahkan fitur baru. Saya ingin mengatur kode saya dengan lebih baik, untuk saat ini dan untuk masa depan.
Saya harus menyebutkan bahwa saya sedang membangun alat (bukan situs web sederhana) dengan banyak tombol, elemen UI, seret, lepas, pendengar / penangan tindakan, dan fungsi dalam lingkup global di mana beberapa pendengar dapat menggunakan fungsi yang sama.
Kode contoh
$('#button1').on('click', function(e){
// Determined action.
update_html();
});
... // Around 75 more of this
function update_html(){ .... }
...
Kesimpulan
Saya benar-benar perlu mengatur kode ini untuk penggunaan terbaik dan tidak mengulangi diri saya sendiri serta dapat menambahkan fitur baru dan memperbarui yang lama. Saya akan mengerjakan ini sendiri. Beberapa penyeleksi dapat terdiri dari 100 baris kode, yang lainnya adalah 1. Saya telah melihat sedikit require.js
dan menemukan itu agak berulang, dan sebenarnya menulis lebih banyak kode daripada yang dibutuhkan. Saya terbuka untuk solusi apa pun yang sesuai dengan kriteria ini dan tautan ke sumber daya / contoh selalu merupakan nilai tambah.
Terima kasih.
Jawaban:
Saya akan membahas beberapa hal sederhana yang mungkin, atau mungkin tidak, membantu Anda. Beberapa mungkin jelas, beberapa mungkin sangat misterius.
Langkah 1: Pisahkan kode Anda
Memisahkan kode Anda menjadi beberapa unit modular adalah langkah pertama yang sangat baik. Kumpulkan apa yang berhasil "bersama-sama" dan letakkan di unit kecil mereka yang terbungkus. jangan khawatir tentang formatnya untuk saat ini, pertahankan agar tetap sebaris. Strukturnya adalah poin selanjutnya.
Jadi, misalkan Anda memiliki halaman seperti ini:
Masuk akal untuk memilah-milah sehingga semua penangan / pengikat kejadian yang terkait dengan tajuk ada di sana, untuk kemudahan pemeliharaan (dan tidak harus menyaring 1000 baris).
Anda kemudian dapat menggunakan alat seperti Grunt untuk membangun kembali JS Anda kembali ke satu unit.
Langkah 1a: Manajemen ketergantungan
Gunakan pustaka seperti RequireJS atau CommonJS untuk mengimplementasikan sesuatu yang disebut AMD . Pemuatan Modul Asinkron memungkinkan Anda untuk secara eksplisit menyatakan pada apa kode Anda bergantung, yang kemudian memungkinkan Anda untuk memindahkan panggilan perpustakaan ke kode. Anda hanya dapat mengatakan "Ini membutuhkan jQuery" dan AMD akan memuatnya, dan mengeksekusi kode Anda ketika jQuery tersedia .
Ini juga memiliki permata tersembunyi: pemuatan perpustakaan akan dilakukan saat DOM siap, bukan sebelumnya. Ini tidak lagi menghentikan pemuatan halaman Anda!
Langkah 2: Memodularisasi
Lihat gambar rangka? Saya memiliki dua unit iklan. Mereka kemungkinan besar telah berbagi pendengar acara.
Tugas Anda dalam langkah ini adalah mengidentifikasi titik-titik pengulangan dalam kode Anda dan mencoba menggabungkan semua ini ke dalam modul . Modul, saat ini, akan mencakup segalanya. Kami akan membagi barang sambil jalan.
Ide keseluruhan dari langkah ini adalah pergi dari langkah 1 dan menghapus semua salinan-pasta, untuk menggantinya dengan unit yang digabungkan secara longgar. Jadi, alih-alih memiliki:
ad_unit1.js
ad_unit2.js
Saya akan memiliki:
ad_unit.js
:page.js
:Yang memungkinkan Anda untuk membagi antara acara Anda dan markup Anda selain menghilangkan pengulangan. Ini adalah langkah yang cukup baik dan kami akan memperpanjangnya nanti.
Langkah 3: Pilih kerangka kerja!
Jika Anda ingin memodularisasi dan mengurangi pengulangan lebih jauh, ada banyak kerangka kerja mengagumkan yang menerapkan pendekatan MVC (Model - View - Controller). Favorit saya adalah Backbone / Spine, namun, ada juga Angular, Yii, ... Daftarnya terus berlanjut.
Sebuah Model merepresentasikan data Anda.
Sebuah Lihat mewakili mark-up Anda dan semua peristiwa yang terkait untuk itu
Sebuah controller mewakili logika bisnis Anda - dengan kata lain, controller memberitahu halaman apa pandangan untuk beban dan apa model untuk digunakan.
Ini akan menjadi langkah pembelajaran yang signifikan, tetapi hadiahnya sepadan: ini lebih menyukai kode modular yang bersih daripada spageti.
Ada banyak hal lain yang bisa Anda lakukan, itu hanya pedoman dan gagasan.
Perubahan khusus kode
Berikut beberapa peningkatan khusus pada kode Anda:
Ini lebih baik ditulis sebagai:
Sebelumnya di kode Anda:
Tiba-tiba, Anda memiliki cara untuk membuat lapisan standar dari mana saja di kode Anda tanpa menyalin tempel. Anda melakukan ini di lima tempat berbeda. Saya baru saja menghemat lima copy-paste.
Satu lagi:
// Ruleset wrapper untuk tindakan
Ini adalah cara yang sangat ampuh untuk mendaftarkan aturan jika Anda memiliki acara yang tidak standar, atau acara pembuatan. Ini juga sangat menarik ketika dikombinasikan dengan sistem notifikasi pub / sub dan ketika terikat ke acara yang Anda aktifkan setiap kali Anda membuat elemen. Fire'n'lupakan acara modular yang mengikat!
sumber
View
. Begitu. Bagaimana ini tidak berlaku untuk kode Anda?layers.js
,sidebar.js
,global_events.js
,resources.js
,files.js
,dialog.js
jika Anda hanya akan membagi kode Anda up. Gunakangrunt
untuk membangunnya kembali menjadi satu danGoogle Closure Compiler
untuk mengkompilasi dan meminimalkan.Berikut adalah cara sederhana untuk membagi basis kode Anda saat ini menjadi beberapa file, menggunakan require.js. Saya akan menunjukkan cara membagi kode Anda menjadi dua file. Menambahkan lebih banyak file akan langsung dilakukan setelah itu.
Langkah 1) Di bagian atas kode Anda, buat objek Aplikasi (atau nama apa pun yang Anda inginkan, seperti MyGame):
var App = {}
Langkah 2) Konversikan semua variabel dan fungsi tingkat atas Anda menjadi milik objek Aplikasi.
Dari pada:
var selected_layer = "";
Kamu ingin:
App.selected_layer = "";
Dari pada:
Kamu ingin:
Perhatikan bahwa pada tahap ini kode Anda tidak akan berfungsi sampai Anda menyelesaikan langkah berikutnya.
Langkah 3) Konversi semua variabel global dan referensi fungsi untuk melalui App.
Ubah hal-hal seperti:
untuk:
dan:
untuk:
Langkah 4) Uji kode Anda pada tahap ini - semuanya harus berfungsi. Anda mungkin akan mendapatkan beberapa kesalahan pada awalnya karena Anda melewatkan sesuatu, jadi perbaiki kesalahan tersebut sebelum melanjutkan.
Langkah 5) Siapkan requirejs. Saya berasumsi Anda memiliki halaman web, disajikan dari server web, yang kodenya ada di:
dan jquery in
Jika jalur ini tidak persis seperti ini, di bawah ini tidak akan berfungsi dan Anda harus mengubah jalurnya.
Unduh requirejs dan letakkan require.js di
www/js
direktori Anda .di Anda
page.html
, hapus semua tag skrip dan masukkan tag skrip seperti:buat
www/js/main.js
dengan konten:kemudian letakkan semua kode yang baru saja Anda perbaiki di Langkah 1-3 (yang hanya variabel globalnya adalah App) di:
Di bagian paling atas file itu, letakkan:
Di bagian bawah:
Kemudian muat halaman.html di browser Anda. Aplikasi Anda harus berfungsi!
Langkah 6) Buat file lain
Di sinilah pekerjaan Anda membuahkan hasil, Anda dapat melakukan ini berulang kali.
Tarik beberapa kode dari
www/js/app.js
referensi $ dan Aplikasi itu.misalnya
Masukkan
www/js/foo.js
Di bagian paling atas file itu, letakkan:
Di bagian bawah:
Kemudian ubah baris terakhir www / js / main.js menjadi:
Itu dia! Lakukan ini setiap kali Anda ingin memasukkan kode ke dalam filenya sendiri!
sumber
r.js
preprocessor. Selain itu, Anda belum benar-benar membahas masalah OP - hanya memberikan petunjuk umumrequire.js
.Untuk pertanyaan dan komentar Anda, saya akan berasumsi bahwa Anda tidak ingin mem-port kode Anda ke kerangka kerja seperti Backbone, atau menggunakan pustaka pemuat seperti Require. Anda hanya ingin cara yang lebih baik untuk mengatur ulang kode yang sudah Anda miliki, dengan cara yang sesederhana mungkin.
Saya mengerti bahwa menjengkelkan menelusuri 2000+ baris kode untuk menemukan bagian yang ingin Anda kerjakan. Solusinya adalah membagi kode Anda dalam file yang berbeda, satu untuk setiap fungsionalitas. Misalnya
sidebar.js
,canvas.js
dll. Kemudian Anda dapat menggabungkan mereka bersama untuk produksi menggunakan Grunt, bersama dengan Usemin Anda dapat memiliki sesuatu seperti ini:Di html Anda:
Di Gruntfile Anda:
Jika Anda ingin menggunakan Yeoman, itu akan memberi Anda kode boilerplate untuk semua ini.
Kemudian untuk setiap file itu sendiri, Anda perlu memastikan bahwa Anda mengikuti praktik terbaik dan bahwa semua kode dan variabel ada di file itu, dan tidak bergantung pada file lain. Ini tidak berarti Anda tidak dapat memanggil fungsi satu file dari file lain, intinya adalah memiliki variabel dan fungsi yang dienkapsulasi. Sesuatu yang mirip dengan namespacing. Saya akan berasumsi Anda tidak ingin mem-port semua kode Anda menjadi Berorientasi Objek, tetapi jika Anda tidak keberatan refactoring sedikit, saya sarankan untuk menambahkan sesuatu yang setara dengan apa yang disebut pola Modul. Ini terlihat seperti ini:
sidebar.js
Kemudian Anda dapat memuat sedikit kode ini seperti ini:
Ini akan memungkinkan Anda memiliki kode yang lebih mudah dipelihara tanpa harus menulis ulang kode Anda terlalu banyak.
sumber
#sidebar #sortable
. Anda juga dapat menghemat memori dengan hanya menyebariskan kode dan menyimpan dua IETF.Gunakan javascript MVC Framework untuk mengatur kode javascript dengan cara standar.
Kerangka kerja MVC JavaScript terbaik yang tersedia adalah:
Memilih kerangka MVC JavaScript membutuhkan begitu banyak faktor untuk dipertimbangkan. Baca artikel perbandingan berikut yang akan membantu Anda memilih kerangka kerja terbaik berdasarkan faktor-faktor penting untuk proyek Anda: http://sporto.github.io/blog/2013/04/12/comparison-angular-backbone-can-ember/
Anda juga dapat menggunakan RequireJS dengan kerangka kerja untuk mendukung pemuatan modul & file js Asynchrounous.
Lihat di bawah ini untuk memulai pemuatan Modul JS:
http://www.sitepoint.com/understanding-requirejs-for-effective-javascript-module-loading/
sumber
Kategorikan kode Anda. Metode ini sangat membantu saya dan berfungsi dengan framework js apa pun:
Di editor pilihan Anda (yang terbaik adalah Komodo Edit) Anda dapat melipat dengan menutup semua entri dan Anda hanya akan melihat judulnya:
sumber
Saya akan menyarankan:
Dalam kasus Anda Jessica, bagi antarmuka menjadi beberapa halaman atau layar. Halaman atau layar dapat menjadi objek dan diperluas dari beberapa kelas induk. Kelola interaksi antara halaman dengan kelas PageManager.
sumber
Saya menyarankan Anda menggunakan sesuatu seperti Backbone. Backbone adalah pustaka javascript yang didukung RESTFUL. Ik membuat kode Anda lebih bersih dan lebih mudah dibaca dan kuat saat digunakan bersama dengan requirejs.
http://backbonejs.org/
http://requirejs.org/
Backbone bukanlah perpustakaan yang sebenarnya. Ini dimaksudkan untuk memberi struktur pada kode javascript Anda. Ia dapat menyertakan pustaka lain seperti jquery, jquery-ui, google-maps, dll. Backbone menurut saya adalah pendekatan javascript terdekat dengan struktur Berorientasi Objek dan Model View Controller.
Juga mengenai alur kerja Anda .. Jika Anda membangun aplikasi Anda dalam PHP gunakan pustaka Laravel. Ini akan bekerja dengan sempurna dengan Backbone saat digunakan dengan prinsip RESTfull. Di bawah tautan ke Laravel Framework dan tutorial tentang membangun RESTfull API:
http://maxoffsky.com/code-blog/building-restful-api-in-laravel-start-here/
http://laravel.com/
Di bawah ini adalah tutorial dari nettuts. Nettuts memiliki banyak tutorial Kualitas Tinggi:
http://net.tutsplus.com/tutorials/javascript-ajax/understanding-backbone-js-and-the-server/
sumber
Mungkin sudah waktunya bagi Anda untuk mulai menerapkan alur kerja pengembangan secara keseluruhan menggunakan alat seperti yeoman http://yeoman.io/ . Ini akan membantu mengontrol semua dependensi Anda, proses pembuatan dan jika Anda mau, pengujian otomatis. Ini banyak pekerjaan untuk memulai tetapi setelah diterapkan akan membuat perubahan masa depan jauh lebih mudah.
sumber