2012-04-17 28 views
5

Tôi đã có một suy nghĩ ngày hôm nay rằng có thể một số người cao niên javascript có thể trả lời.Chi phí thực hiện của việc lập trình nhiều Lớp Mootools

Chi phí DOM ước tính trong việc tạo nhiều lớp trong Mootools là bao nhiêu?

Thiết kế OO tốt ra lệnh rằng bất kỳ bit nào có thể sử dụng lại mã sẽ được đưa vào một Lớp. Nhưng vì mọi Lớp được tạo ra trong mootools rõ ràng được thừa kế từ "Lớp", tất nhiên nó nhận được rất nhiều sự khởi tạo thêm. Vì vậy, của tôi - nhiều hay ít triết học - câu hỏi là, bao nhiêu mà tác động đến hiệu suất trong trình duyệt như tất cả các mã được instantiated onload và với ví dụ bằng cách sử dụng một mô hình DTO với hàng trăm hoặc hàng ngàn lớp trong một mảng, so với đối tượng đơn giản.

Ngạc nhiên, Michael

+0

chi phí DOM nào? một lớp là một đối tượng và nếu nó không tạo ra bất kỳ thứ gì trong DOM thì dấu chân sẽ không xuất hiện ở đó. các đối tượng cũng được truyền bằng tham chiếu và thừa kế sẽ không sao chép từ các đối tượng khác (trừ khi bạn 'thực hiện', tại thời điểm đó nó sẽ sao chép khóa đối tượng). trường hợp sử dụng của bạn sẽ là gì? hàng trăm hoặc hàng ngàn lớp học có vẻ giống như một mô hình chống. dấu chân lớn nhất sẽ là thời gian tạo/xử lý cũng như tất cả các gói phương pháp diễn ra ... hãy giải thích một chút về nhu cầu của bạn –

+0

Cảm ơn nhận xét của bạn. Trường hợp sử dụng của tôi mà tôi đang tưởng tượng là ánh xạ một tập dữ liệu từ máy chủ vào đối tượng DTO. Danh sách này có thể dài bất kỳ. Vì vậy, tôi nghĩ rằng thay vì có một mảng các đối tượng kiểu {}, thì đối với mỗi đối tượng, hãy tạo một cá thể ví dụ như một PostCodeDTO và đặt nó vào mảng thay thế. Về cơ bản gói các mục trả về trong một đối tượng DTO sử dụng ví dụ các thuộc tính mixin cho lớp và tạo một DTO prober với getters và setters vv. –

+0

âm thanh như bạn có thể áp dụng một cái gì đó giống như [shipyard] (https://github.com/seanmonstar/ Shipyard) hoặc [neuro] (https://github.com/GCheung55/Neuro) hoặc thậm chí Ember hoặc Backbone - một mô hình -> cấu trúc bộ sưu tập và chỉ xác định mô hình của bạn sau đó để chúng được xử lý trong một bộ sưu tập và thu hoạch sự kiện cho bất kỳ mục đích gì/lượt xem. –

Trả lời

1

Phải. Đây là cách tôi thấy điều này. Trước hết, một trích dẫn từ @keeto:

ở sang trọng

'' Phần cuối cùng là quan trọng. Mặc dù các lớp học là một cách rất tốt để triển khai mã mô-đun, nhưng đó không phải là cách duy nhất để thực hiện. Tôi thấy rằng ngày nay có một xu hướng đáng lo ngại đối với một số nhà phát triển để sử dụng các lớp học cho mọi thứ. Giống như búa ngôn ngữ, các lớp học đang được sử dụng cho mọi móng tay mã hóa — điều này thật không may, bởi vì không phải tất cả mọi thứ đều được coi là lớp học.

Lớp học rất tuyệt vời để tạo mã có thể sử dụng lại có thể được sử dụng trong các dự án và cá nhân tôi tuân theo tiêu chí đó. Trừ khi tôi chắc chắn rằng thứ gì đó tôi đang xây dựng sẽ được sử dụng nhiều lần, tôi sẽ không biến nó thành một lớp học. Và trong trường hợp bạn không nhận thấy, bạn có thể sử dụng MooTools mà không cần phải xác định một lớp tùy chỉnh duy nhất. Xét cho cùng, chỉ vì MooTools có các lớp học không có nghĩa là bạn sẽ phải viết mã bằng JavaScript như Java. * ''


Nguồn: http://keetology.com/blog/2010/10/01/modules-and-callbacks-going-hollywood-with-mootools

này là rất chủ quan vì nó phụ thuộc nhiều vào cách bạn viết các lớp học và javascript của bạn nói chung.

Sử dụng lớp học KHÔNG phải là không có hình phạt và phí. Phụ thuộc vào loại Class bạn khởi tạo, điều này sẽ khác nhau. Ví dụ, nếu lớp của bạn là một trừu tượng dữ liệu đơn giản mà không chạm vào các đối tượng khác hoặc đầu ra cho DOM, nó là tương đối rẻ để tạo ra các cá thể. Các chi phí sẽ xung quanh các đối tượng tùy chọn xử lý và (đôi khi) các thuộc tính sao chép vào hàm tạo của bạn.

Trong định nghĩa lớp chính nó, MooTools không lặp qua tất cả các thuộc tính đối tượng xây dựng và cố gắng để đối phó với tất cả những người đặc biệt và mutators (ví dụ, initialize, Implements, Extends, binds (từ -Xem thêm) vv). Đây là một lần duy nhất. Khi hàm tạo đã được tạo, bạn có thể sử dụng nó một cách nhanh chóng.

Nó cũng sẽ làm điều gì đó khác - nó sẽ bọc tất cả các thuộc tính có giá trị hàm để bạn có thể trang trí chúng dưới dạng riêng tư (thông qua .protect() trong API hiện tại) để bất kỳ chức năng nào bạn chạy sẽ được xử lý cho bạn. Ngoài ra, bạn cũng thường có xu hướng sử dụng .bind() làm trình trang trí phương thức, có nghĩa là 2 trình bao bọc cho mã thực tế chạy.

Lớp của bạn phức tạp hơn (mở rộng và triển khai từ các lớp ảnh khác nhau), bạn càng có thể tham gia vào việc tạo các phiên bản của lớp học của mình. Trong thực tế, bạn cần phải tạo ra một con quái vật tuyệt đối để bắt đầu nhận thấy điều này như bất cứ điều gì khác hơn là cấp phát bộ nhớ (sự chậm trễ khi bắt đầu hoặc thu gom rác). Tất nhiên, các công cụ cpu-heavy hoặc async/blocking trong các hàm xây dựng cũng sẽ không tốt lắm, nếu bạn thực hiện rất nhiều ...

Sự kiện, trình xử lý sự kiện và vv cũng có thể xếp chồng lên nhau. Các tham chiếu đã lưu vào đối tượng sẽ chồng lên theo thời gian.

Sau đó, có các lớp học liên kết với DOM yếu tố, thêm sự kiện, lắng nghe sự kiện, xuất khẩu các sự kiện riêng của họ ...

Đặt nó tất cả cùng nhau và nó có thể trở nên hơi tốn kém. Bạn đang tạo ra các đối tượng kế thừa (hy vọng bằng cách tham chiếu qua chuỗi nguyên mẫu) từ nhiều nơi. Mặc dù vậy, định nghĩa của các nhà xây dựng lớp của bạn chính nó là nhanh chóng và nó sẽ không được cho đến khi bạn tạo ra 1000 trường hợp mà mọi thứ sẽ bắt đầu trở nên thú vị và đưa một trình duyệt hiện đại vào thử nghiệm.

Các vấn đề liên quan