Обложка канала

iOS Dev

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

iOS Dev

4 года назад
Открыть в
Как диагностировать узкие места при сборке ваших проектов на Swift? Тайпчекер в Swift (инструмент проверки типов) постоянно улучшается, пусть раньше и был узким местом для производительности при компиляции. ⏳ В 2016 году Джордан Роуз добавил флаг компилятора Swift, который выдавал предупреждения в Xcode для функций, которые слишком долго компилировались или, если выразиться точнее, слишком долго проверялись. А с Xcode 9 появился новый, аналогичный флаг для проверки выражений. Речь ниже пойдёт о следующих двух флагах -warn-long-function-bodies Bryan Irace и Soroush Khanlou изначально описали флаг -warn-long-function-bodies. Вы можете указать порог в миллисекундах, при достижении которого будет выдаваться предупреждение. Например: -Xfrontend -warn-long-function-bodies=100 будет выдавать предупреждение в Xcode для любой функции, проверка типа которой занимает более 100 мс. Этот флаг всегда считался экспериментальным, как отметил Джордан в своем оригинальном коммите, но он всё ещё актуален. -warn-long-expression-type-checking С Xcode 9 появился новый аналогичный флаг для тайпчекинга выражений, а не только для функций. Однако на этот раз флаг появился в официальных примечаниях к выпуску Xcode 9 GM. Компилятор может предупреждать нас с помощью этого флага об отдельных выражениях, проверка типов которых занимает много времени. 💡 Советы по использованию Имейте в виду, что если порог слишком низкий, например 10 мс, то вы получите массу предупреждений, которые невозможно исправить. Стоит немного поэкспериментировать со значениями, чтобы найти по-настоящему узкие места. Автор этой статьи предлагает начать с 200, а если ваш проект крупный - с 500, и пытаться уменьшить его с течением времени. Иначе вы потратите много времени, пытаясь заставить все функции и выражения компилироваться менее чем за 200 мс. Кроме того, рекомендуется использовать эти флаги только для конфигураций сборки DEBUG. @iOS Dev