В чем разница между режимом производства и разработки в Angular2?

По какой-то причине я должен запустить свое приложение в режиме производства. В чем разница между этими режимами?

В режиме разработки обнаружение изменений выполняет второй запуск сразу после первого запуска и выдает ошибку, если какое-либо значение границы изменилось между первым и вторым прогонами. Это помогает найти ошибки, при проверке значений которых есть побочные эффекты или поля или функции, не возвращают одно и то же значение при последующих вызовах, которые подрывают обнаружение изменений Углового.

В режиме разработки во время второго запуска обнаружения изменений Angular также выполняет некоторые глубокие сопоставления объектов, которые он не будет делать в производстве, для обнаружения изменений модели, которые запрещены.

Обновить:

В режиме разработки подсказка также печатается на консоли, когда служба дезинфекции HTML разделяет значения из привязок [innerHTML]="..." или [ngStyle]="..." . См. Также: В RC.1 некоторые стили не могут быть добавлены с использованием синтаксиса привязки

Документы для ApplicationRef.tick () :

В режиме разработки tick() также выполняет второй цикл обнаружения изменений (TTL = 2), чтобы гарантировать, что дальнейшие изменения не обнаружены. Если во время этого второго цикла будут получены дополнительные изменения, привязки в приложении будут иметь побочные эффекты, которые не могут быть разрешены в одном проходе обнаружения изменений. В этом случае Angular выдает ошибку, так как угловое приложение может иметь только один проход обнаружения изменений, в течение которого все изменения должны быть завершены.

Причина, по которой мы не можем иметь дополнительных изменений, состоит в том, что в режиме производства обнаружение изменений выполняется только один раз, а это означает, что каждый компонент в дереве компонентов рассматривается один раз (TTL = 1) … сверху, в глубину заказ. Так, если, например, изменение входного свойства дочернего компонента приводит к изменению какого-либо другого свойства, которое родительский компонент связал в представлении / шаблоне, представление родительского компонента не будет обновляться (поскольку обнаружение изменений не будет возвращать родительский компонент в режиме производства … из-за обхода дерева «один проход»). Он будет обновляться только в следующий раз, когда произойдет какое-то событие, и повторное обнаружение снова запустится – но это уже слишком поздно!

Вот Plunker, который нарушает правило – дочерний компонент имеет метод set на свойстве ввода, который модифицирует другое свойство ввода. Да, это надуманный пример, но это легче понять, чем следующий:

Другой сценарий, в котором вы можете столкнуться с этой проблемой, – это трубы с поддержкой состояния. Проверьте этот ответ, если это ваша проблема.

Вы должны описать свою проблему (в другом вопросе SO). Должен быть способ исправить это.

Interesting Posts

Как установить программу по умолчанию для открытия файлов без расширения в Windows?

sqrt из math.h вызывает ошибку компоновщика «неопределенная ссылка на sqrt» только тогда, когда аргумент не является константой

Добавление заголовков Http в HttpClient

Как синхронизировать базу данных SQLite на телефоне Android с базой данных MySQL на сервере?

Как конвертировать PDF-файлы в формат ePub?

Диспетчер задач Windows 8 без повышения?

Графическая линейная диаграмма Excel для сгруппированных данных?

Как я могу получить примитивное имя типа в C #?

Могу ли я перейти на Windows 10 с включенным BitLocker?

Как защитить Firebase Cloud Function HTTP-конечную точку, чтобы разрешать только проверенные пользователями Firebase?

Как настроить ShrewSoft VPN для подключения к Cisco VPN Server?

Rails-4, ExecJS :: ProgramError в Pages # welcome

Неверные поля Scark DataFrame

Как подделать сетевой путь?

Невозможно преобразовать массив типа значения в объект params

Давайте будем гением компьютера.