2015-06-09 16 views
7

DOM ảo là bản sao trọng lượng nhẹ của DOM, được lưu trữ/lưu trữ cục bộ trước khi chèn vào DOM thực tế. Chúng ta có thể thay đổi nó như chúng ta muốn và sau đó lưu vào cây DOM thực của chúng ta. Nó sử dụng các thuật toán khác nhau hiệu quả để cập nhật thay đổi qua lại và các trường hợp sử dụng khác.
Tất cả điều này được thực hiện để tránh thao tác trực tiếp với DOM vì đây là một hoạt động tốn kém.
Chúng tôi có phương thức document.createDocumentFragment() có thể được sử dụng trong JavaScript, cũng tạo ra các đối tượng nút cây tưởng tượng để chèn vào DOM.
Tôi muốn biết, nếu tôi không có chế độ xem/thành phần cần quan sát ở bất kỳ trạng thái nào hoặc liên kết hai chiều (ví dụ: chỉ hiển thị mẫu bằng các tùy chọn đã chuyển và xử lý sự kiện trên DOM), Virtual DOM có thực sự tạo sự khác biệt hay không trong các tình huống như vậy?
Hoặc nó là tốt như createDocumentFragment() nếu tất cả nó phải làm là chỉ cần dựng hình và không quan sát trên nhà nước.Việc triển khai thực thi ảo của Virtual khác với createDocumentFragment() nếu không có trạng thái nào được quan sát?

+1

Câu trả lời phụ thuộc ** hoàn toàn ** vào kịch bản của bạn. Tôi không chắc chắn rằng trong kịch bản bạn mô tả rằng việc sử dụng một đoạn tài liệu sẽ tốt hơn so với thao tác và sửa đổi DOM điển hình hơn. Bạn cần phải kiểm tra kịch bản bạn có trong tâm trí. Phản ứng không chỉ là triển khai thực hiện Virtual DOM và cung cấp các trừu tượng thành phần nữa ... những thứ đó có thể có giá trị. – WiredPrairie

Trả lời

3

Câu trả lời đơn giản nhất là NodeJS làm (/ sẽ) không có document.createDocumentFragment, cũng không document.createElement hoặc bất cứ điều gì như thế.

Điểm của VirtualDOM là cho phép không chỉ chỉnh sửa quy mô lớn cho các hệ thống mà DOM sau này được tiêm, mà còn cho phép bất kỳ chỉnh sửa nào trong môi trường mà DOM chỉ đơn giản không tồn tại.

Đây là sự khác biệt lớn nhất giữa ứng dụng thực tế của DocumentFragment s và VirtualDOM.

Các lợi ích bổ sung về các trường hợp ảo hóa DOM cụ thể sẽ là các thư viện xem nhất định (React, nói) xử lý những điều này khá đơn giản, so với chèn thủ công vào phân đoạn và con cái của chúng.

+0

Không có gì liên quan đến NodeJS tại đây. Bạn có thể sử dụng "document.createDocumentFragment" trong javascript của bạn để tạo các đoạn và sau đó thêm toàn bộ cây vào DOM. Ngoài ra, tôi đã chỉnh sửa câu hỏi cho cùng một. – vivekj011

+0

Vâng, trong trường hợp đó nó chỉ đơn giản là đi xuống đến những thư viện bạn đang sử dụng, và những gì * họ * sử dụng. Bởi vì nếu bạn làm tất cả bằng tay, không có nhiều chức năng trợ giúp, việc chuyển đổi giữa hai chức năng sẽ cung cấp cho bạn thực tế không có lợi ích, để sử dụng thêm bộ nhớ ... Điểm của VirtualDOM là ... Vritualize the DOM . ... không làm cho nó tốt hơn hoặc nhanh hơn, hoặc huyền diệu hơn hoặc thậm chí dễ dàng hơn để làm việc với. Các thư viện sử dụng VirtualDOM (hoặc là kỹ thuật hoặc thư viện virtual-dom thực tế) có thể làm tất cả những thứ đó và hơn thế nữa. Không chuyển đổi để làm điều đó bằng tay ... – Norguard

+0

Ngoài ra còn có lợi ích trong kiểm thử tích hợp, cho các bài kiểm tra đơn giản, nơi bạn không muốn dành thời gian xây dựng và xé các trang HTML, đặc biệt để có quyền truy cập DOM, để kiểm tra giá trị của một phần tử/thuộc tính (chẳng hạn như chạy một thiết lập CI bằng cách sử dụng Mocha). Nhưng một lần nữa, nếu thử nghiệm không được tính là một lợi ích, một trong hai, thì nó vẫn nằm trong Elms và Reacts và những thứ tương tự. – Norguard

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