Discuss Scratch
- Discussion Forums
- » Pусский
- » Оптимизация кода и поиск ошибок: советы программиста
- LiveForHim
-
Scratcher
30 posts
Оптимизация кода и поиск ошибок: советы программиста
Проект очень долго грузится? Не получается найти ошибку? Непонятно, как оптимизировать? Что-то лагает? Тогда этот пост для тебя!
Оптимизация. Проект долго загружается? Спрайты лагают? Значит, используется многовато памяти.
Проблема 1. Слишком много спрайтов
Чем больше в проекте спрайтов, тем дольше он будет загружаться, а если в коде где-то ошибка, то найти её, очевидно, проще, когда спрайтов мало. Что делать?
▪︎ Спрайты, выполняющие одинаковые функции, по возможности объединяй в один спрайт: даже если у него будет несколько костюмов, работать с этим станет проще.
▪︎ Если есть клоны, в конце скриптов желательно их удалять, если они не пригодятся потом ещё раз и если их действие не бесконечное.
Проблема 2. Излишнее качество или подробность изображений
Чем выше разрешение изображения, тем больше памяти оно занимает. Из-за этого может плохо грузиться или лагать проект. Что делать?
▪︎ Уменьшай размеры костюмов и фонов до минимального необходимого качества.
▪︎ Убирай неважные и незаметные детали картинок: это не повлияет на проект, но уменьшит количество памяти, которое нужно для его хранения, а значит, ускорит работу.
▪︎ Используй как можно меньше костюмов. Например, для анимации ходьбы достаточно оставить 5-6 кадров вместо 10. Это незначительное изменение всё равно полезно, особенно если спрайт постоянно меняет костюм (например, долго показывается, как идёт человек).
Проблема 3. Передача лишних сообщений
Если спрайты много обмениваются сообщениями, это создаёт дополнительную нагрузку. Что делать?
▪︎ По возможности заменяй сообщения переменными. Например, можно завести переменную “флаг”. Изначально она равна нулю, а когда происходит что-то, за чем мы следим, нужно задать ей значение 1. Тогда другой спрайт сможет без сообщения проверять, произошло ли что-то.
▪︎ Убирай лишние сообщения. Иногда бывает удобно передавать много сообщений: на каждый случай своё. Но зачастую действия одного спрайта зависят от другого. Тогда им не нужно два разных сообщения: “зависимый” может реагировать на те же сообщения, что и “главный”.
Дебаг. Видишь ошибку? Нет? И я не вижу. А она есть!
Проблема 1. Сложные вычисления, длинные выражения
Если у тебя длинная формула, найти ошибку в ней не так-то просто! Что делать?
▪︎ Разбивай выражения на логические действия и сохраняй промежуточные результаты в переменные. Потом делай более простую формулу уже с этими переменными. Так будет легче понимать, что происходит.
Проблема 2. Очень длинный код
Длинный код неудобно читать. Он плохо воспринимается, а найти ошибку вообще почти нереально. Что делать?
▪︎ Разбивай сложные и длинные скрипты на более мелкие: часто выполняемые куски кода выделяй в отдельный блок (розовый блок из раздела “Другие блоки”). Тогда программа будет состоять из более простых шагов. Её будет проще просматривать. Разбивая действия спрайта на небольшие подзадачи, легко обнаружить ошибку или лишние блоки.
▪︎ Кстати, про лишние блоки. Удаляй все дублирующиеся и ненужные блоки. Если ты использовал какие-то дополнительные скрипты для проверки работы программы, их тоже стоит удалить.
▪︎ Заменяй бесконечные циклы на циклы с условием “повторять пока не”. Тогда будет проще понять, до какого момента что работает, и не нужно будет писать много условий “если, то”, “иначе” и делать лишние проверки.
Проблема 3. И всё же, где ошибка?
Виновник происшествия так и не был найден? Надо что-то делать! Что именно?
▪︎ Объясни код вслух. Программисты используют для этого резиновую уточку. Они объясняют код ей. Надо идти по скрипту и проверять каждое действие:
1) Что я хочу, чтобы было сделано?
2) Что делает программа?
3) Если ответы на первый и второй вопросы совпали, всё нормально. Иначе – ошибка найдена!
▪︎ Проверяй значения переменных по ходу выполнения программы. Как только что-то не совпадёт с тем, что ожидалось, нужно искать ошибку в том коде, который выполняется до ошибки. После смотреть бессмысленно, раз переменная приходит туда уже с неверным значением.
▪︎ Комментируй код. Чем подробнее ты распишешь для себя то, что делает программа, тем легче заметить ошибку. В комментариях объясняй код так, чтобы у любого читателя не возникло вопросов: если кто-нибудь другой прочитает комментарии, он должен всё понять, не уточняя ничего у тебя.
Остались вопросы? Пиши!
Оптимизация. Проект долго загружается? Спрайты лагают? Значит, используется многовато памяти.
Проблема 1. Слишком много спрайтов
Чем больше в проекте спрайтов, тем дольше он будет загружаться, а если в коде где-то ошибка, то найти её, очевидно, проще, когда спрайтов мало. Что делать?
▪︎ Спрайты, выполняющие одинаковые функции, по возможности объединяй в один спрайт: даже если у него будет несколько костюмов, работать с этим станет проще.
▪︎ Если есть клоны, в конце скриптов желательно их удалять, если они не пригодятся потом ещё раз и если их действие не бесконечное.
Проблема 2. Излишнее качество или подробность изображений
Чем выше разрешение изображения, тем больше памяти оно занимает. Из-за этого может плохо грузиться или лагать проект. Что делать?
▪︎ Уменьшай размеры костюмов и фонов до минимального необходимого качества.
▪︎ Убирай неважные и незаметные детали картинок: это не повлияет на проект, но уменьшит количество памяти, которое нужно для его хранения, а значит, ускорит работу.
▪︎ Используй как можно меньше костюмов. Например, для анимации ходьбы достаточно оставить 5-6 кадров вместо 10. Это незначительное изменение всё равно полезно, особенно если спрайт постоянно меняет костюм (например, долго показывается, как идёт человек).
Проблема 3. Передача лишних сообщений
Если спрайты много обмениваются сообщениями, это создаёт дополнительную нагрузку. Что делать?
▪︎ По возможности заменяй сообщения переменными. Например, можно завести переменную “флаг”. Изначально она равна нулю, а когда происходит что-то, за чем мы следим, нужно задать ей значение 1. Тогда другой спрайт сможет без сообщения проверять, произошло ли что-то.
▪︎ Убирай лишние сообщения. Иногда бывает удобно передавать много сообщений: на каждый случай своё. Но зачастую действия одного спрайта зависят от другого. Тогда им не нужно два разных сообщения: “зависимый” может реагировать на те же сообщения, что и “главный”.
Дебаг. Видишь ошибку? Нет? И я не вижу. А она есть!
Проблема 1. Сложные вычисления, длинные выражения
Если у тебя длинная формула, найти ошибку в ней не так-то просто! Что делать?
▪︎ Разбивай выражения на логические действия и сохраняй промежуточные результаты в переменные. Потом делай более простую формулу уже с этими переменными. Так будет легче понимать, что происходит.
Проблема 2. Очень длинный код
Длинный код неудобно читать. Он плохо воспринимается, а найти ошибку вообще почти нереально. Что делать?
▪︎ Разбивай сложные и длинные скрипты на более мелкие: часто выполняемые куски кода выделяй в отдельный блок (розовый блок из раздела “Другие блоки”). Тогда программа будет состоять из более простых шагов. Её будет проще просматривать. Разбивая действия спрайта на небольшие подзадачи, легко обнаружить ошибку или лишние блоки.
▪︎ Кстати, про лишние блоки. Удаляй все дублирующиеся и ненужные блоки. Если ты использовал какие-то дополнительные скрипты для проверки работы программы, их тоже стоит удалить.
▪︎ Заменяй бесконечные циклы на циклы с условием “повторять пока не”. Тогда будет проще понять, до какого момента что работает, и не нужно будет писать много условий “если, то”, “иначе” и делать лишние проверки.
Проблема 3. И всё же, где ошибка?
Виновник происшествия так и не был найден? Надо что-то делать! Что именно?
▪︎ Объясни код вслух. Программисты используют для этого резиновую уточку. Они объясняют код ей. Надо идти по скрипту и проверять каждое действие:
1) Что я хочу, чтобы было сделано?
2) Что делает программа?
3) Если ответы на первый и второй вопросы совпали, всё нормально. Иначе – ошибка найдена!
▪︎ Проверяй значения переменных по ходу выполнения программы. Как только что-то не совпадёт с тем, что ожидалось, нужно искать ошибку в том коде, который выполняется до ошибки. После смотреть бессмысленно, раз переменная приходит туда уже с неверным значением.
▪︎ Комментируй код. Чем подробнее ты распишешь для себя то, что делает программа, тем легче заметить ошибку. В комментариях объясняй код так, чтобы у любого читателя не возникло вопросов: если кто-нибудь другой прочитает комментарии, он должен всё понять, не уточняя ничего у тебя.
Остались вопросы? Пиши!
Last edited by LiveForHim (May 2, 2026 05:54:37)
- osipow_alex
-
Scratcher
32 posts
Оптимизация кода и поиск ошибок: советы программиста
У меня проблема в скрипте начисления валюты(
и так далее, суть в том что скрипт проверяет номер костюма, на определённый костюм своя цена,но такой блок примерно на каждый костюм и по пять спрайтов(((
можешь посмотреть в моём проекте (https://scratch.mit.edu/projects/1215843798/) И ПОД СПРАЙТАМИ 1,2,3,4,5 БУДУТ ЭТИ ПРОБЛЕМЫ(
посоветуй чтонибуть
when green flag clicked
forever
if <(foo) = (foo)> then
change [ v] by (0)
end
end
и так далее, суть в том что скрипт проверяет номер костюма, на определённый костюм своя цена,но такой блок примерно на каждый костюм и по пять спрайтов(((
можешь посмотреть в моём проекте (https://scratch.mit.edu/projects/1215843798/) И ПОД СПРАЙТАМИ 1,2,3,4,5 БУДУТ ЭТИ ПРОБЛЕМЫ(
посоветуй чтонибуть
- LiveForHim
-
Scratcher
30 posts
Оптимизация кода и поиск ошибок: советы программиста
У меня проблема в скрипте начисления валюты(Ты не опубликовал проект, я не могу его посмотреть. Можешь поделиться, а потом обратно убрать?when green flag clicked
forever
if <(foo) = (foo)> then
change [ v] by (0)
end
end
и так далее, суть в том что скрипт проверяет номер костюма, на определённый костюм своя цена,но такой блок примерно на каждый костюм и по пять спрайтов(((
можешь посмотреть в моём проекте (https://scratch.mit.edu/projects/1215843798/) И ПОД СПРАЙТАМИ 1,2,3,4,5 БУДУТ ЭТИ ПРОБЛЕМЫ(
посоветуй чтонибуть
Last edited by LiveForHim (May 21, 2026 19:53:26)
- Discussion Forums
- » Pусский
-
» Оптимизация кода и поиск ошибок: советы программиста