Bu gönderi en son 2019-2-13 14:04 tarihinde Summer tarafından düzenlenmiştir
2009 yılında Amerikalı programcı Ryan Dahl, sunucu tarafı programlama için JavaScript dilini kullanacak node.js proje yarattı.
Bu, "Javascript modüler programlama"nın doğuşunu işaret eder. Ön tarafın karmaşıklığı sınırlıdır ve modül olmaması normaldir, ancak sunucu tarafında işletim sistemi ve diğer uygulamalarla etkileşime girecek modüller olmalıdır, aksi takdirde hiç programlanamaz.
Düğüm programlamadaki en önemli fikirlerden biri modüllerdir ve bu fikir JavaScript'in büyük ölçekli mühendisliğini mümkün kılmaktadır. Modüler programlama JS dünyasında popülerdi ve buna dayanıyordu; ardından tarayıcı tarafında, requirejs ve seajs gibi araç setleri de, tabiri caizse, ES6'dan önce, hatta şimdi, ES6 modülü tam olarak uygulanmadan önce tüm modüler programlamaları zorunlu kılan araçlar da ortaya çıktı.
CommonJS'de exposure modülü module.exports ve exports kullanır ve birçok kişi neden iki exposed nesne olduğunu anlamıyor, bu nesne daha sonra tanıtılacak
CommonJS'de, modülleri yüklemek için kullanılan küresel bir yöntem require() vardır. Bir matematik modülü varsa math.js, bu şekilde yüklenebilir.
Modül tarafından sağlanan yöntemleri çağırabilirsiniz:
Tam da CommonJS tarafından kullanılan vaadi yöntemi nedeniyle, AMD ve CMD tarafından kullanılan require yöntemi daha sonra modül tarzını ifade etmek için kullanılmıştır
AMD spesifikasyonu
Sunucu tarafı modüllerde, herkesin istemci tarafı modülleri istemesi doğaldır. Ve en iyisi ikisinin uyumlu olması ve bir modülün hem sunucuda hem de tarayıcıda değişiklik yapmadan çalışabilmesi olur.
Ancak, CommonJS spesifikasyonunun tarayıcı ortamlarına uygulanmaz hale getiren büyük bir sınırlama vardır. Önceki bölümdeki kod ise, eğer tarayıcıda çalışıyorsa büyük bir sorun olur
İkinci satır math.add(2, 3) ise ilk satırın gereksiniminden ('math') sonra çalışır, yani math.js yükün bitmesini beklemek zorunda. Yani, yükleme süresi uzunsa, tüm uygulama orada durur ve bekler.
Bu sunucu tarafında bir sorun değildir, çünkü tüm modüller yerel sabit diskte saklanır ve senkron olarak yüklenebilir, bekleme süresi ise sabit diskin okuma süresidir. Ancak tarayıcılar için bu büyük bir sorundur çünkü modüller sunucu tarafında konumlandırılır ve bekleme süresi internet hızının hızına bağlıdır; bu uzun sürebilir ve tarayıcı "askıya alınmış ölüm" durumundadır.
Bu nedenle, tarayıcı tarafı modülleri "senkron" kullanamaz, sadece "asenkron" kullanabilir. Bu, AMD spesifikasyonunun doğuşunun arka planıdır.
AMD, "Asenkron Modül Tanımı" (Asenkron Modül Tanımı) anlamına gelen "Asenkron Modül Tanımı" (Asenkron Modül Tanımı) anlamına gelir. Modülü asenkron olarak yükler ve modülün yüklenmesi, sonraki ifadelerinin işleyişini etkilemez. Bu modüle bağlı olan tüm ifadeler, yükleme tamamlanana kadar çalışmayan bir geri çağırma fonksiyonunda tanımlanır.
Modüller belirli bir define() fonksiyonuyla tanımlanmalıdır.
•ID: dizi, modül adı (isteğe bağlı) •Dependencies: yüklemek istediğimiz bağımlı modüldür (isteğe bağlı), göreceli yol kullanılarak. , bunun bir dizi formatı olduğunu unutmayın •fabrika: fabrika yöntemi, modül fonksiyonu döndürür Bir modül diğer modüllere bağlı değilse, define() fonksiyonunda doğrudan tanımlanabilir.
Modül diğer modüllere de bağımlıysa, define() fonksiyonunun ilk argümanı, modülün bağımlılıklarını gösteren bir dizi olmalıdır.
require() fonksiyonu yukarıdaki modülü yüklediğinde, önce Lib.js dosyayı yükler.
AMD ayrıca modülü yüklemek için require() ifadesini kullanır, ancak CommonJS'nin aksine, iki parametre gerektirir:
İlk parametre [modül] bir dizidir ve içindeki üyeler yüklenecek modüllerdir; İkinci parametre geri çağırması, yük başarılı olduktan sonra geri çağrı fonksiyonudur. Önceki kodu AMD formuna yeniden yazarsanız, şöyle görünür:
math.add() matematik modülü yüklemesiyle senkronize edilmez ve tarayıcı animasyonu askıya almıyor. Yani AMD tarayıcı ortamı için daha uygun.
Şu anda, AMD spesifikasyonunu :require.js ve curl.js uygulayan iki ana Javascript kütüphanesi bulunmaktadır.
|