Tại sao nên sử dụng AMD?

  • JavaScript
  • 03 tháng 11 2016
  • bởi Văn Khương
  • 0 Comments

The Asynchronous Module Definition (AMD) là cơ chế định nghĩa những modules và tải các phụ thuộc một cách không đồng bộ. Điều này thực sự tốt khi làm việc với những request từ phía trình duyệt, cải thiện khả năng thực thi, giễ ràng quản lý code, mở rộng và tìm lỗi nhanh chóng. Với việc sử dụng cấu trúc AMD chúng ta không còn phải khai báo các thẻ script trong HTML thường sẽ có một số biến global bởi các thư viện hay plugin cần sử dụng, biết được cái nào phụ thuộc cái nào và thứ tự của chúng một cách tường minh, không còn phải chạy những tool build trong khi đang phát triển, việc build tốt hơn chỉ dùng khi deploy ứng dụng.

Sử dụng CommonJS thì sao?

CommonJS đang được sử dụng rộng rãi tới ngày nay cùng với sự phát triển của NodeJS, hiện đang rất phổ biến khi dùng nó để sử lý phía server, nhưng nếu sử dụng phía trình duyệt có lẽ cần cân nhắc tính khả dụng của nó, tất cả được gom về 1 file để sử dụng dưới trình duyệt trong khi bạn vẫn làm việc với những file riêng lẻ như vậy tất cả đều được tải cùng một lúc, mỗi file là một module.

Định nghĩa một module với AMD

Thông qua một hàm đơn giản "define" tất cả mọi thứ sẽ được thực hiện trong một hàm callback của nó gọi là factory

define(id?, dependencies?, factory);

Chúng ta có nhiều tùy chọn sử dụng với 3 đối số trên để định nghĩa một module với các phụ thuộc, mọi thứ cần làm được thực hiện trong factory. Với AMD khi không cần cơ chế tải các phụ thuộc không đồng bộ bạn vẫn có thể sử dụng tool build để gom về một file duy nhất. Xét về cấu trúc code có thể thấy AMD chưa thực sự bắt mắt so với cách viết của CommonJS sử dụng "require" và "exports".

Vẫn còn nhiều tranh luận về việc sử dụng AMD hay CommonJS, tuy nhiên đa phần đều đồng tình rằng AMD tốt cho việc sử dụng phía trình duyệt hơn, nhưng với sự phổ biến của CommonJS sẽ đem lại một cách viết đồng nhất từ phía server và client. Ngày nay với phiên bản javaScript ES6 bạn còn có thể viết kiểu module với cú pháp "import" "export" điều này mang hơi hướng của CommonJS. Để lại bình luận bên dưới nếu bạn có những nhận định nào về việc viết javaScript dưới dạng module với AMD, CommonJS hay ES6.

Tham khảo requirejs

  • Chia sẻ
comments powered by Disqus