Apabila membina aplikasi web, salah satu cabaran paling asas yang dihadapi pembangun ialah mengemas kini Model Objek Dokumen (DOM) dengan cekap sebagai tindak balas kepada interaksi pengguna dan perubahan keadaan. Mari terokai konsep ini dengan memeriksa tiga pelaksanaan berbeza bagi aplikasi todo, setiap satu mempamerkan pendekatan berbeza terhadap manipulasi DOM.
Github: https://github.com/sreeharsha-rav/javascript_projects/blob/main/todo-app/README.md
Dalam pelaksanaan pertama kami, kami menggunakan pendekatan yang paling mudah: memanipulasi DOM secara langsung apabila perubahan berlaku. Berikut ialah versi ringkas tentang cara kami mengendalikan penambahan tugasan baharu:
function addTodo() { const todoText = input.value; const todoElement = document.createElement('div'); todoElement.textContent = todoText; todoList.appendChild(todoElement); }
Pendekatan ini intuitif dan berfungsi dengan baik untuk aplikasi mudah, tetapi ia mempunyai had:
Pelaksanaan kedua kami memperkenalkan konsep pengurusan negeri. Daripada memanipulasi DOM secara langsung, kami mengekalkan keadaan pusat dan mengemas kini DOM berdasarkan keadaan itu:
const todoStore = new Map(); function addTodo(text) { // Update state const id = nextId++; todoStore.set(id, { text, completed: false }); // Update DOM const todoElement = createTodoElement(text, id); todoList.appendChild(todoElement); }
Pendekatan ini membawa beberapa penambahbaikan:
Walau bagaimanapun, kami masih menghadapi cabaran: memastikan kemas kini DOM kami cekap dan mengekalkan konsistensi antara negeri kami dan UI.
Pelaksanaan terakhir kami memperkenalkan mekanisme seperti DOM maya yang ringkas menggunakan perbezaan keadaan. Pendekatan ini mewakili lonjakan ketara dalam kecanggihan:
let todoState = []; // Current state let oldTodoState = []; // Previous state function updateState(newTodos) { // Find what changed const added = newTodos.filter(newTodo => !oldTodoState.some(oldTodo => oldTodo.id === newTodo.id) ); const deleted = oldTodoState.filter(oldTodo => !newTodos.some(newTodo => newTodo.id === oldTodo.id) ); const updated = // ... find updated items // Update only what changed added.forEach(todo => addTodoElement(todo)); deleted.forEach(todo => removeTodoElement(todo)); updated.forEach(todo => updateTodoElement(todo)); // Save current state for next comparison oldTodoState = [...newTodos]; }
Konsep perdamaian, yang dipopularkan oleh React, adalah tentang mengemas kini DOM dengan cekap agar sepadan dengan keadaan yang kita inginkan. Pelaksanaan mudah kami menunjukkan tiga aspek utama:
Kami mengekalkan dua versi keadaan kami: semasa dan sebelumnya. Ini membolehkan kami mengesan dengan tepat apa yang berubah antara kemas kini. Proses mencari perbezaan ini dipanggil "pembezaan."
Daripada membina semula segala-galanya, kami hanya mengemas kini perkara yang berubah:
Semua kemas kini DOM kami berlaku dalam satu laluan, selepas kami mengira semua perbezaan. Ini lebih cekap daripada membuat kemas kini satu demi satu apabila perubahan berlaku.
Semasa kami maju melalui pelaksanaan ini, kami memperoleh beberapa kelebihan:
Walaupun pelaksanaan kami dipermudahkan, ia menunjukkan konsep teras di sebalik rangka kerja hadapan moden seperti React. Pelaksanaan DOM Maya sebenar dalam React adalah lebih canggih, mengendalikan:
Evolusi aplikasi todo kami menunjukkan cara pendekatan yang berbeza untuk manipulasi DOM datang dengan pertukaran yang berbeza. Walaupun manipulasi langsung lebih mudah untuk difahami dan dilaksanakan, pendekatan yang lebih berstruktur dengan pengurusan negeri dan kemas kini pintar membawa kepada aplikasi yang lebih boleh diselenggara dan berskala.
Konsep perdamaian dan perbezaan, walaupun dalam bentuk ringkasnya, menunjukkan sebab rangka kerja moden seperti React sangat berkuasa. Mereka mengendalikan kemas kini kompleks ini secara automatik, membolehkan pembangun menumpukan pada ciri membina dan bukannya mengoptimumkan kemas kini DOM.
Apabila aplikasi web menjadi lebih kompleks, pemahaman konsep asas ini menjadi semakin penting. Sama ada anda menggunakan rangka kerja atau membina sesuatu dari awal, mengetahui cara dan sebab kemas kini DOM berfungsi dengan cara yang sama akan menjadikan anda pembangun yang lebih berkesan.
Atas ialah kandungan terperinci Manipulasi DOM daripada Kemas Kini Mudah kepada DOM Maya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!