
Я использую macOS сГЛОТОКвключено. И я выясняю, почему скрипты так медленно работают с SIP после изменения или создания.
И я обнаружил, что если я изменяю скрипт с помощью таких редакторов, как vim или nano, и запускаю его ./script.bash
, то для завершения скрипта в первый раз после каждого изменения потребуется около 1 секунды.
Например. Если script.bash это:
#!/bin/bash
echo 1
И я меняю его на ниже на vim
. Мне требуется примерно в десять раз больше времени, чтобы его запустить.
#!/bin/bash
echo 1
echo 2
bash-3.2$ time ./script.bash # First time after modification by vim
1
2
real 0m0.884s
user 0m0.001s
sys 0m0.002s
bash-3.2$ time ./script.bash # Second time after modification by vim
1
2
real 0m0.003s
user 0m0.001s
sys 0m0.002s
В то время как если я сейчас добавляю файл с помощью перенаправления вывода какой-либо команды, например, echo "echo 3" >> script.bash
и все равно вызываю скрипт с помощью ./script.bash
, задержка исчезает.
bash-3.2$ echo "echo 3" >> script.bash
bash-3.2$ time ./script.bash # First time after modification by echo
1
2
3
real 0m0.004s
user 0m0.001s
sys 0m0.002s
bash-3.2$ time ./script.bash # Second time after modification by echo
1
2
3
real 0m0.002s
user 0m0.001s
sys 0m0.001s
Так в чем же разница между двумя способами записи файла? И почему задержка происходит только приГЛОТОКвключено?
решение1
я нашелЭта статьячто, я думаю, объясняет вашу проблему.
Apple ввела нотаризацию, оставив в стороне неудобства, которые это приносит нам, разработчикам, это также приводит к ухудшению пользовательского опыта, поскольку в первый раз, когда пользователь запускает новый исполняемый файл, Apple откладывает выполнение, ожидая ответа от своего сервера. Эта проверка для меня занимает около секунды.
Это касается не только файлов, загруженных из интернета, и не только запуска их через Finder, это касается всего. Так что даже если вы напишете однострочный скрипт оболочки и запустите его в терминале, вы получите задержку!
Что касается проверки нотариального заверения, результат кэшируется, поэтому повторный вызов должен быть быстрым, но если вы разработчик, вы можете регулярно обновлять свои скрипты и двоичные файлы, что запускает новые проверки (судя по всему, кэширование основано на inode, поэтому сохранение с обновлением на месте может избежать запуска новой проверки), или у вас могут быть рабочие процессы, включающие динамическое создание и выполнение скриптов, производительность которых теперь зависит от скорости реагирования серверов Apple.
Похоже, что изменение файла через редактор приводит к изменению inode, заставляя его снова проверяться, но добавление его с перенаправлением — нет.