Untuk beberapa alasan, saya harus menjalankan aplikasi saya dalam mode produksi. Apa perbedaan antara kedua mode tersebut?
Untuk beberapa alasan, saya harus menjalankan aplikasi saya dalam mode produksi. Apa perbedaan antara kedua mode tersebut?
Jawaban:
Dalam mode pengembangan, deteksi perubahan melakukan proses kedua segera setelah proses pertama dan menghasilkan kesalahan jika ada nilai terikat yang berubah antara proses pertama dan kedua. Ini membantu untuk menemukan bug di mana memeriksa nilai memiliki efek samping atau bidang atau fungsi tidak mengembalikan nilai yang sama pada panggilan berikutnya yang merusak deteksi perubahan Angular.
Dalam mode pengembangan, selama proses deteksi perubahan kedua, Angular juga melakukan beberapa perbandingan objek mendalam yang tidak akan dilakukan dalam produksi untuk mendeteksi perubahan model yang tidak diizinkan.
Memperbarui:
Dalam mode pengembangan, petunjuk juga dicetak ke konsol saat layanan pembersih HTML menghapus nilai dari binding [innerHTML]="..."
atau [ngStyle]="..."
. Lihat juga: Di RC.1 beberapa gaya tidak dapat ditambahkan menggunakan sintaks binding
Dokumen untuk status ApplicationRef.tick () :
Dalam mode pengembangan,
tick()
lakukan juga siklus deteksi perubahan kedua (TTL = 2) untuk memastikan bahwa tidak ada perubahan lebih lanjut yang terdeteksi. Jika perubahan tambahan terjadi selama siklus kedua ini, binding di aplikasi memiliki efek samping yang tidak dapat diselesaikan dalam satu kali proses deteksi perubahan. Dalam hal ini, Angular melontarkan kesalahan, karena aplikasi Angular hanya dapat memiliki satu deteksi perubahan yang selama itu semua deteksi perubahan harus diselesaikan.
Alasan kami tidak dapat memiliki perubahan tambahan adalah karena dalam mode produksi, deteksi perubahan hanya berjalan satu kali, yang berarti bahwa setiap komponen di pohon komponen diperiksa sekali (TTL = 1) ... dari atas, secara mendalam-pertama memesan. Jadi jika, misalnya, perubahan ke properti input komponen anak menyebabkan perubahan ke beberapa properti lain yang terikat oleh komponen induk dalam tampilan / template, tampilan komponen induk tidak akan diperbarui (karena deteksi perubahan tidak akan mengunjungi kembali komponen induk dalam mode produksi ... karena traversal pohon "satu jalan"). Ini hanya akan diperbarui saat beberapa peristiwa terjadi dan deteksi perubahan berjalan lagi - tapi itu sudah terlambat!
Berikut Plunker yang melanggar aturan - komponen anak memiliki set
metode pada properti input yang mengubah properti input lain. Ya, ini adalah contoh yang dibuat-buat, tetapi lebih mudah dipahami daripada yang berikut:
Skenario lain di mana Anda mungkin mengalami masalah ini adalah dengan pipa stateful. Lihat jawaban ini jika itu masalah Anda.
Anda harus menjelaskan masalah Anda (dalam pertanyaan SO lainnya). Harus ada cara untuk memperbaikinya.