Tại sao kích thước tệp của React lại lớn như vậy trong khi API nhỏ của nó?


88

Đây là những con số

  • tối thiểu + gzip 26k
  • gzip 90k
  • ban đầu 450 + k

Và React không có nhiều tính năng trong tài liệu của nó. Tại sao nó lớn như vậy?

Tôi có cảm giác rằng đó là việc triển khai DOM nhẹ. Nhưng tôi muốn chắc chắn.


4
Bạn đã xem qua nguồn chưa, để xem nó làm gì? Mẹo hữu ích, đừng nhìn vào phiên bản thu nhỏ.
Mr Lister

6
Tôi quyết định hỏi trước khi đi sâu vào mã. Mặc dù tôi đang lên kế hoạch sử dụng phản ứng nhưng dù sao thì tôi cũng sẽ lặn ở đó;)
Eldar Djafarov

2
26k không phải là lớn chút nào ..
BT

Mọi người đang nói phản ứng không lớn. Vâng, reactjs chính nó là rất nhỏ (6.41KB cho phiên bản 16.1.1) nhưng hãy nhớ rằng Phản ứng đòi hỏi một ReactDOM với công việc và ReactDOM có 92.4KB kích thước
Đinh Trần

Câu trả lời:


187

React thực hiện khá nhiều! Phần nổi bật nhất của React có lẽ là hệ thống sự kiện - React không chỉ thực hiện điều phối và tạo sự kiện của riêng mình, nó còn bình thường hóa các sự kiện phổ biến trên các trình duyệt để bạn không cần phải lo lắng nhiều về nó. Ví dụ: SelectEventPlugin là một "plugin" sự kiện được tích hợp sẵn, cung cấp một onSelectsự kiện hoạt động giống nhau trong tất cả các trình duyệt.

Việc triển khai DOM ảo cũng cần một lượng mã khá lớn; rất nhiều nỗ lực được dành cho việc tối ưu hóa hiệu suất, đó là lý do tại sao phiên bản chưa được hoàn thiện bao gồm ReactPerf , một công cụ để đo lường hiệu suất hiển thị. Khi cập nhật DOM, React cũng thực hiện một số điều thuận tiện cho bạn như duy trì bất kỳ lựa chọn đầu vào nào và giữ nguyên vị trí cuộn hiện tại.

React cũng có một vài thủ thuật khác. Một trong những điều thú vị nhất là nó hỗ trợ hoàn toàn việc hiển thị một thành phần thành một chuỗi HTML ngay cả khi bạn không có môi trường trình duyệt, vì vậy bạn có thể gửi xuống một trang hoạt động ngay cả trước khi JS được tải.


Bạn đang so sánh React với cái gì? react-15.0.2.min.js43k (gzipped), nhưng jQuery là 33k trong khi ember-2.6.0.prod.js363k (also gzipped). Rõ ràng là những framework này không làm những việc giống hệt nhau nhưng chúng có rất nhiều điểm trùng lặp, vì vậy tôi nghĩ sự so sánh là hợp lý.

Nếu bạn lo lắng về kích thước tải xuống, tôi sẽ không lo lắng quá nhiều về mã JS góp phần vào điều đó. Đây là một quảng cáo mà tôi nhìn thấy ở bên phải của trang Stack Overflow của mình ngay bây giờ:

Kích thước tải xuống của nó là 95k - Tôi sẽ không nghĩ lại về việc đưa một hình ảnh như vậy vào một trang bởi vì (ngay cả khi tôi lo lắng về hiệu suất) thường có rất nhiều thứ khác liên quan đến hiệu suất để sửa chữa có lợi hơn.


Tóm lại, tôi không nghĩ React lớn đến vậy, và kích thước của nó đến từ rất nhiều điều nhỏ nhặt mà nó làm để giúp bạn. Bạn trích dẫn API nhỏ của React như một lý do khiến mã của React phải nhỏ, nhưng một câu hỏi hay hơn có thể là, "Làm cách nào để API của React có thể trở nên đơn giản như vậy với tất cả những thứ mà nó làm cho bạn?"

… Nhưng đó là một câu hỏi hoàn toàn riêng biệt. :) Hy vọng tôi đã trả lời câu hỏi của bạn - vui vẻ mở rộng nếu tôi không.


4
Bạn hoàn toàn trả lời câu hỏi của tôi. React thật tuyệt vời. Tôi đang nghĩ đến việc sử dụng nó cho thiết bị di động nên kích thước là quan trọng. Nó chỉ là không có nhiều thông tin xung quanh những gì nó làm. Và tôi đang nghĩ rằng có nhiều thủ thuật hơn tôi có thể sử dụng :) Tôi cảm thấy rằng tôi có thể loại bỏ những thứ jquery. Và paulmillr / bộ xương ngoài là chỉ trong thời gian :)
Eldar Djafarov

2
Tôi đang tìm hiểu khái niệm hoàn toàn khác về xây dựng ứng dụng. Kiểm tra vimeo.com/78151404github.com/component/component - sử dụng những thứ mà bạn không quan tâm đến jQuery chút nào và compy chơi tốt với jsxtransformations. Và React thực hiện công việc khó nhất - mọi thứ khác (Mô hình, định tuyến, giao tiếp máy chủ) có thể được bao phủ bởi các thành phần vi mô.
Eldar Djafarov

30
Lưu ý, chúng tôi đang sử dụng Phản ứng trên trang web di động của Facebook trong đó kích thước là dứt khoát vô cùng quan trọng :)
Vjeux

4
@lightblade Ừm ... không. Việc sử dụng bộ nhớ phụ thuộc vào số lượng phân bổ mã của bạn. React rất cố gắng để tránh phân bổ.
Dan Abramov

2
@ 1nfiniti Được rồi, đã cập nhật một số số mới vì đã hai năm rưỡi.
Sophie Alpert

-1

Một vài suy nghĩ .. Tôi đã có một số mối quan tâm tương tự với kích thước của nó, nhưng sau khi sử dụng nó, không đùa được, tôi sẽ sử dụng nó nếu nó có kích thước 5MB. Nó chỉ tốt như vậy. Điều đó nói rằng, tôi đã quyết định giảm càng nhiều phụ thuộc vào các thư viện khác càng tốt. Tôi đang sử dụng jquery cho hai việc .. ajax và phản hồi ajax tự động và xử lý yêu cầu (beforeSend, v.v.) sẽ xử lý khi mã thông báo trong phản hồi sau khi đăng nhập và sau đó đảm bảo rằng mọi yêu cầu ajax đã thêm nó vào tiêu đề Ủy quyền trước đó gửi. Tôi đã thay thế điều này bằng một đoạn javascript gốc đơn giản siêu nhỏ. Hoạt động tuyệt vời. Ngoài ra, tôi đã cố gắng sử dụng _underscore. Tôi đã thay thế nó bằng lodash, nhỏ hơn và nhanh hơn, mặc dù hiện tại tôi không sử dụng nó vì vậy có thể xóa nó hoàn toàn.

Đây là một bài báo, trong số rất nhiều bài viết trên google, mà tôi thấy rằng có một số lựa chọn thay thế bằng cách sử dụng JS gốc thay vì jquery.

http://www.sitepoint.com/jquery-vs-raw-javascript-1-dom-forms/


1
Bạn cũng có thể chỉ cần xây dựng một phiên bản tùy chỉnh của jQuery với các mảnh bạn sử dụng nếu bạn đang nhắm mục tiêu nhiều trình duyệt
Dan Heberden
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.