Ngày nay, chúng tôi có rất nhiều thư viện Javascript trên mỗi trang ngoài các tệp Javascript mà chúng tôi tự viết. Làm thế nào để bạn quản lý tất cả? Làm thế nào để bạn khai thác chúng một cách có tổ chức?Làm cách nào để quản lý các tệp Javascript của bạn?
Trả lời
Trước hết, YUI Compressor.
Việc sắp xếp chúng được tổ chức tùy thuộc vào bạn, nhưng hầu hết các nhóm mà tôi đã xem chỉ có đưa ra quy ước có ý nghĩa đối với ứng dụng của chúng.
Nói chung là tối ưu để đóng gói tệp của bạn theo cách sao cho bạn có một số lượng nhỏ các gói có thể được đưa vào bất kỳ trang nhất định nào để lưu vào bộ đệm tối ưu.
Bạn cũng có thể xem xét việc chia javascript của mình thành các phân đoạn dễ dàng chia sẻ trong toàn bộ nhóm.
Ngoài ra còn có một phiên bản trực tuyến: http://refresh-sf.com/yui/ – ine
Tôi sẽ có một thư mục cho tất cả javascript và thư mục con của thư mục thứ ba/thư viện được chia sẻ và thư mục con cho từng thành phần của trang web để giữ mọi thứ được sắp xếp.
Ví dụ:
/
+--/javascript/
+-- lib/
+-- admin/
+-- compnent1/
+-- compnent2/
Sau đó chạy tất cả mọi thứ thông qua một minifier/obfuscator trong quá trình xây dựng.
I'v được sử dụng này thời gian gần đây: http://code.google.com/apis/ajaxlibs/
Và sau đó có một "JScripts" thư mục mà tôi giữ mã tùy chỉnh của tôi.
Tổ chức
Tất cả các kịch bản của tôi được duy trì trong một cấu trúc thư mục mà tôi làm theo bất cứ khi nào tôi làm việc trên một trang web. Cấu trúc thư mục bình thường đi một cái gì đó như thế này:
+--root
|--javascript
|--lib
|--prototype.js
|--scriptaculous
|--scriptaculous.js
|--effects.js
|--..
|--myOwnScript.js
|--myOwnScript2.js
Nếu, cơ hội giảm giá, mà tôi đang làm việc trên một đội sử dụng một số tiền inordinate kịch bản, sau đó tôi sẽ thường tạo ra một tùy chỉnh thư mục trong chúng tôi sẽ tổ chức các kịch bản theo mối quan hệ. Tuy nhiên, điều này không xảy ra khủng khiếp.
nén
Mặc dù có rất nhiều máy nén và bộ obfuscate khác nhau trên mạng, tôi luôn luôn trở về với YUI Compressor.
Bao gồm
Trừ khi một trang web đang sử dụng một số hình thức của một trang chính, CMS hoặc thứ gì đó quyết định những gì có thể được đưa vào một trang ngoài tầm kiểm soát của tôi, tôi chỉ bao gồm các tập lệnh nhất thiết là cho trang đã cho chỉ vì lợi ích nhỏ. Nếu một trang không yêu cầu bất kỳ tập lệnh nào, sẽ không có vùi tập lệnh trên trang đó.
Trong dự án cuối cùng của tôi, chúng tôi có ba loại tệp JS, tất cả chúng trong một thư mục JS.
- Mã thư viện. Một loạt các chức năng được sử dụng trên hầu hết tất cả các trang, vì vậy chúng được đặt cùng nhau trong một hoặc một vài tệp.
- Lớp học. Các tệp này có các tệp riêng của chúng, được sắp xếp trong các thư mục nếu cần nhưng không nhất thiết phải như vậy.
- Ad hoc JS. Mã cụ thể cho trang đó. Chúng được lưu trong các tệp có cùng tên với các trang JSP mà chúng được cho là chạy.
Nỗ lực lớn nhất là có hầu hết mã trên hai loại đầu tiên, có mã tùy chỉnh chỉ biết những gì gọi và khi nào.
Đây có thể là một cách tiếp cận khác với những gì bạn đang tìm kiếm, nhưng tôi đã thử nghiệm ý tưởng về các mẫu JavaScript trong công cụ blog của chúng tôi. Tóm lại, bạn gán một mẫu Javascript cho một id trang sử dụng cơ sở dữ liệu và nó sẽ bao gồm và rút gọn tất cả các tệp JavaScript được liên kết với mẫu đó và tạo một tệp trong bộ nhớ cache phía máy chủ với id mẫu làm tên tệp. Khi một trang được tải, nó sẽ gọi tệp mẫu trước tiên sẽ kiểm tra xem tệp có tồn tại trong bộ nhớ cache hay không và tải nó nếu có. Nếu nó không tồn tại, nó tạo ra nó trên bay và bao gồm nó. Tôi cũng sử dụng tệp mẫu để gzip tệp JavaScript của tập đoàn.
Ý tưởng mẫu sẽ hoạt động tốt cho JavaScript trên toàn trang web (như thư viện JavaScript) nhưng không bao gồm JavaScript dành riêng cho từng trang. Tuy nhiên, bạn vẫn có thể sử dụng cùng một cách tiếp cận cho JavaScript cụ thể của trang bằng cách bao gồm tệp thứ hai thực hiện tương tự như trên.
Cal Henderson (của Flickr nổi tiếng) đã viết Serving JavaScript Fast một thời gian trở lại. Nó bao gồm việc phân phối nội dung chứ không phải tổ chức, nhưng nó có thể trả lời một số câu hỏi của bạn.
Dưới đây là những điểm đạn:
- Có, bạn phải nối các file JavaScript trong sản xuất để giảm thiểu số lượng yêu cầu HTTP.
- NHƯNG bạn có thể không muốn ghép vào một tệp khổng lồ; bạn có thể muốn chia nó thành các phần hợp lý và trải rộng chi phí chuyển đổi qua một vài trang.
- nén gzip là tốt, nhưng bạn không nên phân phối nội dung được nén vào IE < = 6, vì vậy bạn cũng có thể muốn rút gọn/nén JavaScript của mình.
Tôi sẽ thêm một vài điểm nhấn của riêng tôi:
- Bạn nên đưa ra một giải pháp mà làm việc cho cả hai phát triển và sản xuất. Trong chế độ phát triển, nó sẽ kéo thêm các tệp JavaScript theo yêu cầu; trong quá trình sản xuất, nó phải bó mọi thứ trước thời hạn. Chuyển đổi từ một hành vi này sang hành vi khác phải dễ dàng như việc đặt cờ.
- Rails 2.0 xử lý tất cả điều này thông qua asset cache; các khung ứng dụng web khác có thể cung cấp các giải pháp tương tự.
- Như một câu trả lời khác cho thấy, việc đặt thư viện của bên thứ ba trong thư mục
lib
là một khởi đầu tốt. Bạn cũng có thể chia các tệp JS của riêng bạn thành các thư mục con nếu nó có ý nghĩa. Lý tưởng nhất, bạn sẽ có thể sắp xếp chúng theo cách sao cho các tệp trong một thư mục con nhất định có thể được nối vào một tệp.
- 1. Làm cách nào để quản lý các phụ thuộc bên ngoài cho ứng dụng của bạn?
- 2. Làm cách nào để quản lý các mô-đun Javascript trong các mẫu django?
- 3. Làm thế nào để bạn quản lý giấy phép của các phụ thuộc (thư viện) của dự án của bạn?
- 4. Làm cách nào để thuyết phục người quản lý của bạn rằng dự án của bạn cần tái cấu trúc?
- 5. Bạn quản lý mã DojoX của mình như thế nào?
- 6. Làm thế nào để bạn quản lý các tệp ứng dụng .NET.config cho các ứng dụng lớn?
- 7. Quản lý phụ thuộc JavaScript
- 8. Làm cách nào để tổ chức mã Javascript của bạn?
- 9. Làm cách nào để quản lý các tệp cấu hình trong Perl?
- 10. Phương pháp dễ nhất/tốt nhất để quản lý tệp thẻ ctags của bạn là gì?
- 11. Bạn làm cách nào để ghi lại JavaScript của mình?
- 12. Làm thế nào để bạn quản lý bố cục ui của ứng dụng Ember.js?
- 13. Làm cách nào để quản lý các tệp dữ liệu lớn với GitHub?
- 14. Làm cách nào để tối ưu hóa Javascript của bạn?
- 15. Làm thế nào để bạn quản lý các kết nối cơ sở dữ liệu trong php?
- 16. Làm cách nào để quản lý và phát triển các dự án lớn của TYPO3?
- 17. Bạn nhớ/quản lý các ví dụ SQL của mình như thế nào?
- 18. Làm cách nào để quản lý chiều rộng của các tab điều hướng ActionBar?
- 19. Làm cách nào để bạn xử lý các tùy chọn dòng lệnh và tệp cấu hình?
- 20. Làm cách nào để quản lý múi giờ trong Sitecore?
- 21. Quản lý dự án JavaScript lớn hơn
- 22. Làm cách nào để quản lý các phụ thuộc của mô-đun Perl?
- 23. C# Làm cách nào để đếm các chuỗi được quản lý trong AppDomain của tôi?
- 24. Làm thế nào để bạn quản lý Vòng đời phát triển dự án PHP?
- 25. Làm thế nào để bạn quản lý các dự án Delphi của bạn với các thành phần của bên thứ ba trong Kiểm soát phiên bản?
- 26. Bạn quản lý các ứng dụng Django của mình như thế nào?
- 27. Làm cách nào để quản lý kích thước tệp nhật ký WCF theo chương trình?
- 28. Viết trình quản lý bộ nhớ của riêng bạn
- 29. Bạn quản lý các mô-đun tùy chỉnh của mình như thế nào?
- 30. Làm cách nào để bạn tạo các mô tả bảo mật Windows trong mã được quản lý?
My answer cho một câu hỏi tương tự. – roosteronacid