it-swarm.com.ru

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

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

81
Rhushikesh

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

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

Update:

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

71
Günter Zöchbauer

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

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

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

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

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

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

35
Mark Rajcok