Explorar el Código

Translation(RU). Workflow section. Part 2: Translated 6 Articles (#216)

* Translation(RU). Workflow section. Part 1: Translated 1st 4 Articles: "Adapting to different screen sizes", "Bundling an application", "Bob the builder", "Hot reloading"

* Translation(RU). Workflow section. Part 1: Translated 6 Articles: "Optimizing an application", "Profiling", "Refactoring", "The mobile dev app", "Version control", "Working offline"
N C hace 3 años
padre
commit
53c6ec25e0

+ 1 - 1
docs/ru/manuals/bundling.md

@@ -7,7 +7,7 @@ brief: В этом руководстве рассказывается, как 
 
 При разработке приложения вы должны выработать привычку как можно чаще тестировать игру на целевых платформах. Это необходимо для того, чтобы выявлять проблемы с производительностью на ранних этапах процесса разработки, когда эти проблемы гораздо легче исправить. Также рекомендуется тестировать на всех целевых платформах, чтобы найти расхождения в таких вещах, как шейдеры. При разработке на мобильных устройствах у вас есть возможность использовать [приложение для мобильной разработки](/manuals/dev-app/) для отправки содержимого в приложение вместо того, чтобы выполнять полную пересборку и цикл удаления/установки.
 
-Вы можете создать бандл приложения для всех платформ, которые поддерживает Defold, из самого редактора Defold без каких-либо внешних инструментов. Вы также можете сделать бандл из командной строки с помощью наших инструментов командной строки. Бандлинг приложения требует сетевое соединение, если ваш проект содержит одно или несколько [native extension-ов](/manuals/extensions). 
+Вы можете создать бандл приложения для всех платформ, которые поддерживает Defold, из самого редактора Defold без каких-либо внешних инструментов. Вы также можете сделать бандл из командной строки с помощью наших инструментов командной строки. Бандлинг приложения требует сетевое соединение, если ваш проект содержит одно или несколько [нативных расширений](/manuals/extensions).
 
 ## Бандлинг прямо из редактора
 

+ 86 - 0
docs/ru/manuals/dev-app.md

@@ -0,0 +1,86 @@
+---
+title: Запуск приложения для разработки на устройстве 
+brief: В этом руководстве объясняется, как установить приложение для разработки на ваше устройство для итеративной разработки на нем.
+---
+
+# Приложение для мобильной разработки
+
+Приложение для разработки позволяет загружать в него контент через Wi-Fi. Это значительно сократит время итерации, поскольку вам не нужно делать бандл и устанавливать его каждый раз, когда вы хотите протестировать свои изменения. Вы устанавливаете приложение для разработки на свое устройство(а), запускаете приложение, а затем выбираете устройство в качестве цели сборки в редакторе. 
+
+## Установка приложения для разработки
+
+Любое приложение, собранное в режиме отладки, сможет действовать как приложение для разработки. На Android доступна автономная версия движка Defold, а на iOS вам необходимо вручную собрать бандл и подписать его, используя свой собственный идентификатор подписи и provisioning профиль. 
+
+### Установка на iOS 
+
+Любое iOS приложение, бандл которого был собран как отладочный вариант, сможет действовать как приложение для разработки. Рекомендуется сделать бандл отладочного варианта приложения, над которым вы сейчас работаете. Это гарантирует, что приложение для разработки имеет правильные настройки проекта и использует те же [нативные расширения](/manuals/extensions/). Следуйте [инструкциям в руководстве по iOS](/manuals/ios/#creating-an-ios-application-bundle), чтобы собрать бандл для iOS. Обязательно выберите вариант Debug!
+
+### Установка на Android
+
+Такая же рекомендация делать бандл отладочной версии, что и для iOS, работает и для Android. В дополнение к этой опции существует также автономная версия движка Defold, доступная в виде готового файла *.apk*, который вы можете установить на устройство и использовать для итеративной разработки по беспроводной сети. 
+::: important
+Автономная версия будет работать только для проектов без каких-либо [нативных расширений](/manuals/extensions/). Если ваш проект содержит native extension-ы, вы должны собрать бандл отладочного варианта вашего проекта, чтобы убедиться, что приложение для разработки содержит все native extension-ы, которые вы собираетесь использовать. 
+:::
+* Посетите http://d.defold.com, где можно найти скачать Defold. 
+* Щелкните версию, которую хотите загрузить, чтобы развернуть список доступных сборок движка.
+* Выберите *engine/armv7-android/dmengine.apk* для сборки с включенной отладкой для платформы Android (Armv7).
+
+![Скачать dmengine](images/dev-app/download_dmengine.png)
+
+Скачайте файл, затем введите следующую команду `adb` из папки содержащей *.apk*: 
+
+```sh
+$ adb install dmengine.apk
+4445 KB/s (8706017 bytes in 1.912s)
+    pkg: /data/local/tmp/dmengine.apk
+Success
+```
+
+Приложение для разработки "dmengine" теперь доступно на устройстве.
+
+![dmengine на устройстве](images/dev-app/dmengine_on_device.png)
+
+## Запуск вашей игры
+
+Чтобы запустить игру на вашем устройстве, приложение для разработки и редактор должны иметь возможность подключаться через одну и ту же сеть Wi-Fi или через USB (см. ниже). 
+
+1. Убедитесь, что редактор запущен.
+2. Запустите приложение для разработки на устройстве.
+3. Выберите свое устройство в редакторе в разделе <kbd>Project ▸ Targets</kbd>.
+4. Выберите <kbd>Project ▸ Build</kbd>, чтобы запустить игру. Для запуска игры может потребоваться некоторое время, поскольку игровой контент передается на устройство по сети.
+5. Пока игра запущена, вы по-прежнему можете использовать [горячую перезагрузку](/manuals/hot-reload/).
+
+![запуск](images/dev-app/launch.png)
+
+### Подключение к устройству iOS через USB в Windows
+
+При подключении через USB в Windows к приложению для разработки, работающему на устройстве iOS, сначала необходимо [установить iTunes](https://www.apple.com/lae/itunes/download/). После установки iTunes вам также необходимо [включить персональную точку доступа](https://support.apple.com/en-us/HT204023) на вашем устройстве iOS в меню «Настройки». Если вы видите предупреждение, которое спрашивает «Доверять этому компьютеру?», тапните Доверять. Теперь устройство должно отображаться в разделе <kbd>Project ▸ Targets</kbd>, когда приложение для разработки запущено. 
+
+### Подключение к устройству iOS через USB в Linux
+
+В Linux вам необходимо включить Personal Hotspot на вашем устройстве в меню настроек при подключении через USB. Если вы видите предупреждение, которое спрашивает «Доверять этому компьютеру?», тапните Доверять. Теперь устройство должно отображаться в разделе <kbd>Project ▸ Targets</kbd>, когда приложение для разработки запущено. 
+
+### Подключение к устройству iOS через USB в macOS
+
+В более новых версиях iOS устройство автоматически откроет новый интерфейс Ethernet между устройством и компьютером при подключении через USB в macOS. Устройство должно отображаться в разделе <kbd>Project ▸ Targets</kbd>, когда приложение для разработки запущено.
+
+В более старых версиях iOS вам необходимо включить Personal Hotspot на вашем устройстве в меню «Настройки» при подключении через USB в macOS. Если вы видите предупреждение, которое спрашивает «Доверять этому компьютеру?», тапните Доверять. Теперь устройство должно отображаться в разделе <kbd>Project ▸ Targets</kbd>, когда приложение для разработки запущено. 
+
+### Подключение к устройству Android через USB в macOS
+
+В macOS можно подключиться через USB к работающему приложению для разработки на устройстве Android, когда устройство находится в режиме USB-модема. В macOS необходимо установить сторонний драйвер, например [HoRNDIS](https://joshuawise.com/horndis#available_versions). Когда HoRNDIS установлен, вам также необходимо разрешить его запуск в настройках Security & Privacy. После включения USB-модема устройство будет отображаться в разделе <kbd>Project ▸ Targets</kbd> при запуске приложения для разработки. 
+
+### Подключение к устройству Android через USB в Windows или Linux
+
+В Windows и Linux можно подключиться через USB к работающему приложению для разработки на устройстве Android, когда устройство находится в режиме USB-модема. После включения USB-модема устройство будет отображаться в разделе <kbd>Project ▸ Targets</kbd> при запуске приложения для разработки. 
+
+## Поиск и устранение проблем
+
+Невозможно скачать приложение
+: Убедитесь, что UDID вашего устройства включен в mobile provisioning, который использовался для подписи приложения. 
+
+Ваше устройство не отображается в меню "Targets".
+: Убедитесь, что ваше устройство подключено к той же сети Wi-Fi, что и ваш компьютер. 
+
+Игра не запускается с сообщением о несовпадении версий
+: Это происходит, когда вы обновили редактор до последней версии. Вам необходимо собрать и установить новую версию приложения.

BIN
docs/ru/manuals/images/android/apk_file.png


BIN
docs/ru/manuals/images/android/enable_androidx.png


BIN
docs/ru/manuals/images/android/enable_supportlibrary.png


BIN
docs/ru/manuals/images/android/sign_bundle.png


BIN
docs/ru/manuals/images/android/sign_bundle2.png


BIN
docs/ru/manuals/images/android/usb_debugging.png


BIN
docs/ru/manuals/images/dev-app/dmengine_on_device.png


BIN
docs/ru/manuals/images/dev-app/download_dmengine.png


BIN
docs/ru/manuals/images/dev-app/install.jpg


BIN
docs/ru/manuals/images/dev-app/launch.png


BIN
docs/ru/manuals/images/dev-app/sign.png


BIN
docs/ru/manuals/images/libraries/libraries_dependencies.png


BIN
docs/ru/manuals/images/libraries/libraries_done.png


BIN
docs/ru/manuals/images/libraries/libraries_fetch_libraries.png


BIN
docs/ru/manuals/images/libraries/libraries_include_dirs.png


BIN
docs/ru/manuals/images/libraries/libraries_library_url.png


BIN
docs/ru/manuals/images/libraries/libraries_library_url_github.png


+ 161 - 0
docs/ru/manuals/optimization.md

@@ -0,0 +1,161 @@
+---
+title: Оптимизация игры на Defold
+brief: В этом руководстве описывается, как оптимизировать Defold приложение по размеру и производительности.
+---
+
+# Оптимизация игры на Defold
+Важно понимать технические ограничения платформы (платформ), на которой должна запускаться ваша игра, и оптимизировать ее для данной платформы (платформ) при разработке. Следует учитывать несколько аспектов:
+
+* Размер приложения
+* Скорость
+* Использование памяти
+* Использование батареи 
+
+## Оптимизация размера приложения
+При сборке и бандлинге вашего приложения Defold создаст дерево зависимостей. Система сборки запустится из коллекции начальной загрузки (bootstrap collection), указанной в файле *game.project*, и проверит каждую коллекцию на которую ссылаются, игровой объект и компонент, чтобы выстроить список используемых ресурсов. Только эти ресурсы будут включены в окончательный бандл приложения. Все, на что нет прямых ссылок, будет исключено. Хотя полезно знать, что неиспользуемые ресурсы не будут включены, вам как разработчику все же необходимо учитывать, что входит в окончательное приложение, а также размер отдельных ассетов и общий размер бандла приложения. Некоторые целевые платформы и каналы распространения имеют ограничения на размер приложения: 
+
+* Apple и Google определили ограничения на размер приложений при загрузке через мобильные сети (в отличие от загрузки через Wi-Fi).
+   * Летом 2019 года эти ограничения составляли 100 МБ для Google Play и 150 МБ для Apple App Store.
+* Facebook имеет рекомендацию, что запуск Facebook Instant Game должен занимать менее 5 секунд, а желательно менее 3 секунд.
+   * Что это означает для фактического размера приложения, четко не определено, но мы говорим о размере в диапазоне до 20 МБ.
+* Размер проигрываемой рекламы обычно ограничен от 2 до 5 МБ в зависимости от рекламной сети. 
+
+::: sidenote
+Согласно исследованию 2017 года, было показано, что «на каждые 6 МБ увеличения размера APK-файла наблюдается снижение коэффициента конверсии установок на 1%». ([источник](https://medium.com/googleplaydev/shrinking-apks-growing-installs-5d3fcba23ce2)) 
+:::
+
+Чтобы лучше понять, что составляет размер вашего приложения, вы можете [создать отчет о сборке](/manuals/bundling/#build-reports) во время бандлинга. Довольно часто звуки и графика занимают большую часть размера любой игры.
+
+### Уменьшение размера движка
+Вы можете использовать [файл манифеста приложения](https://defold.com/manuals/project-settings/#app-manifest) для удаления тех компонентов движка, которые вам не нужны. Вы можете, например, удалить подключаемые физические движки, если ваша игра не использует физику. Воспользуйтесь [Manifestation online tool](https://britzl.github.io/manifestation/) для создания манифеста приложения. 
+
+### Оптимизация звуков
+Defold поддерживает файлы .ogg и .wav, где .ogg обычно используется для музыки, а .wav - для звуковых эффектов. Звуки должны быть 16-битными с частотой дискретизации 44100, поэтому перед кодированием звуков необходимо выполнить все нужные оптимизации. Вы можете редактировать звуки во внешнем звуковом редакторе, чтобы снизить качество или преобразовать из .wav в .ogg. 
+
+### Оптимизация графики
+У вас есть несколько вариантов оптимизации графики, используемой в вашей игре, но первое, что нужно сделать, - это проверить размер графики, которая добавляется в атлас или используется в качестве источника тайлов. Никогда не используйте графику большего размера, чем это действительно необходимо в вашей игре. Импорт больших изображений и их масштабирование до подходящего размера - это пустая трата памяти текстур, и этого следует избегать. Начните с подгонки размера изображений с помощью внешнего программного обеспечения для редактирования изображений до фактического размера, необходимого для вашей игры. Для таких вещей, как фоновые изображения, также можно использовать небольшое изображение и масштабировать его до желаемого размера. После того, как вы уменьшили изображения до нужного размера и добавили их в атласы или использовали в источниках тайлов, вам также необходимо принять во внимание размер самих атласов. Максимальный размер атласа, который можно использовать, зависит от платформы и графического оборудования. 
+
+::: sidenote
+[В этих постах на форуме](https://forum.defold.com/t/texture-management-in-defold/8921/17?u=britzl) предлагается несколько советов о том, как изменить размер нескольких изображений с помощью скриптов или стороннего программного обеспечения.
+:::
+
+* Максимальный размер текстуры в HTML5: https://webglstats.com/webgl/parameter/MAX_TEXTURE_SIZE 
+* Максимальный размер текстуры в iOS:
+  * iPad: 2048x2048
+  * iPhone 4: 2048x2048
+  * iPad 2, 3, Mini, Air, Pro: 4096x4096
+  * iPhone 4s, 5, 6+, 6s: 4096x4096
+* Максимальный размер текстуры на Android сильно различается, но в целом все относительно новые устройства поддерживают 4096x4096. 
+
+Если атлас слишком большой, вам нужно либо разделить его на несколько меньших атласов, либо масштабировать весь атлас с помощью профиля текстуры. Система профилей текстур в Defold позволяет не только масштабировать атласы целиком, но и применять алгоритмы сжатия для уменьшения размера атласа на диске. Вы можете [подробнее узнать о профилях текстур в руководстве](/manuals/texture-profiles/). 
+
+::: sidenote
+Вы можете узнать больше о том, как оптимизировать текстуры и управлять ими в [этом посте на форуме](https://forum.defold.com/t/texture-management-in-defold/8921).
+:::
+
+### Исключение контента для загрузки по запросу
+Другой способ уменьшить исходный размер приложения - исключить части игрового контента из бандла приложения и сделать их загружаемыми по мере необходимости. Исключенный контент может быть чем угодно, от целых уровней до разблокируемых персонажей, скинов, оружия или транспортных средств. Defold предоставляет систему под названием Live Update для исключения содержимого для загрузки по запросу. Подробнее читайте в [Руководстве по Live Update](/manuals/live-update/).
+
+### Оптимизации размера специфичные для Android
+Сборки под Android должны поддерживать как 32-разрядные, так и 64-разрядные архитектуры CPU. Когда вы [готовите бандл под Android](/manuals/android), вы можете указать, какие архитектуры CPU включать: 
+
+![Подписывание Android бандла](images/android/sign_bundle.png)
+
+Google Play поддерживает [мульти-APK](https://developer.android.com/google/play/publishing/multiple-apks) для каждой версии игры, что означает, что вы можете уменьшить размер приложения, создав два APK, по одному на архитектуру CPU и загрузить оба в Google Play. 
+
+Вы также можете использовать комбинацию [файлов APK-расширения](https://developer.android.com/google/play/expansion-files) и [Live Update контент](/manuals/live-update)) благодаря [расширению APKX с портала экстеншенов](https://defold.com/assets/apkx/). 
+
+
+## Оптимизация скорости приложения
+Прежде чем пытаться оптимизировать игру с целью увеличения скорости ее выполнения, вам необходимо знать, где находятся ваши узкие места. Что на самом деле занимает большую часть времени в кадре вашей игры? Это рендеринг? Это ваша игровая логика? Это граф сцены? Чтобы в этом разобраться, рекомендуется использовать встроенные инструменты профилирования. Используйте [экранный или веб-профилировщик](/manuals/profiling/), чтобы оценить производительность вашей игры, а затем примите решение, нужно ли оптимизировать что-то и что именно. Как только вы лучше поймете, на что уходит процессорное время, вы сможете приступить к решению проблем. 
+
+### Уменьшение времени выполнения скрипта
+Уменьшение времени выполнения скрипта необходимо, если профилировщик показывает высокие значения для категории `Script`. Как правило, вы, конечно, должны стараться запускать как можно меньше кода в каждом кадре. Запуск большого количества кода в `update()` и `on_input()` в каждом кадре может повлиять на производительность вашей игры, особенно на маломощных устройствах. Вот некоторые рекомендации: 
+
+#### Используйте шаблоны реактивного программирования
+Не запрашивайте изменения, если вы можете получить функцию обратного вызова. Не анимируйте что-либо вручную и не выполняйте задачи, которые могут быть переданы движку (например, go.animate вместо анимации чего-либо вручную). 
+
+#### Сократите объем сборки мусора
+Если вы создаете множество короткоживущих объектов, таких как таблицы Lua, в каждом кадре, это в конечном итоге вызовет сборщик мусора Lua. Когда это происходит, это может проявляться в виде небольших пауз/скачков во времени кадра. Повторно используйте таблицы там, где вы можете и действительно старайтесь избегать создания таблиц Lua внутри циклов и подобных конструкций, если это возможно. 
+
+#### Заранее пред-хешируйте идентификаторы сообщений и действий
+Если вы обрабатываете много сообщений или имеете дело с большим количеством событий ввода, рекомендуется предварительно хешировать задействуемые строки. Рассмотрим этот фрагмент кода: 
+
+```
+function on_message(self, message_id, message, sender)
+    if message_id == hash("message1") then
+        msg.post(sender, hash("message3"))
+    elseif message_id == hash("message2") then
+        msg.post(sender, hash("message4"))
+    end
+end
+```
+
+В приведенном выше сценарии хешированная строка будет пересоздаваться каждый раз при получении сообщения. Это можно улучшить, создав хешированные строки один раз и используя хешированные версии при обработке сообщений: 
+
+```
+local MESSAGE1 = hash("message1")
+local MESSAGE2 = hash("message2")
+local MESSAGE3 = hash("message3")
+local MESSAGE4 = hash("message4")
+
+function on_message(self, message_id, message, sender)
+    if message_id == MESSAGE1 then
+        msg.post(sender, MESSAGE3)
+    elseif message_id == MESSAGE2 then
+        msg.post(sender, MESSAGE4)
+    end
+end
+```
+
+#### Предпочитайте URL-ы и кэшируйте их
+Передача сообщений или другие способы адресации игрового объекта или компонента могут быть выполнены как путем предоставления идентификатора в виде строки или хэша, так и в виде URL-адреса. Если используется строка или хеш, они будут внутренне переведены в URL. Поэтому рекомендуется кэшировать часто используемые URL-адреса, чтобы получить максимальную производительность системы. Обратите внимание на следующий пример: 
+
+```
+    local pos = go.get_position("enemy")
+    local pos = go.get_position(hash("enemy"))
+    local pos = go.get_position(msg.url("enemy"))
+    -- do something with pos
+```
+
+Во всех трех случаях будет извлечена позиция игрового объекта с идентификатором `enemy`. В первом и втором случае идентификатор (строка или хэш) будет преобразован в URL-адрес перед использованием. Это говорит нам о том, что для максимальной производительности лучше кэшировать URL-адреса и использовать кешированную версию: 
+
+```
+    function init(self)
+        self.enemy_url = msg.url("enemy")
+    end
+
+    function update(self, dt)
+        local pos = go.get_position(self.enemy_url)
+        -- do something with pos
+    end
+```
+
+### Сократите время, необходимое для рендеринга кадра
+Уменьшение времени, необходимого для рендеринга кадра, необходимо, если профилировщик показывает высокие значения в категориях `Render` и `Render Script`. При попытке сократить время, необходимое для рендеринга кадра, следует учитывать несколько моментов: 
+
+* Уменьшение количества вызовов отрисовки - Подробнее о сокращении вызовов отрисовки читайте в [этом посте на форуме](https://forum.defold.com/t/draw-calls-and-defold/4674)
+* Уменьшение перерисовки
+* Снижение сложности шейдеров - читайте об оптимизации GLSL в [этой статье от Kronos](https://www.khronos.org/opengl/wiki/GLSL_Optimizations). Вы также можете изменить шейдеры, используемые Defold по умолчанию (находятся в `builtins/materials`), и уменьшить точность шейдеров, чтобы получить некоторую скорость на маломощных устройствах. Все шейдеры используют точность `highp`, и изменение, например, до `mediump` может в некоторых случаях немного улучшить производительность. 
+
+### Снижение сложности графа сцены
+Уменьшение сложности графа сцены необходимо, если профилировщик показывает высокие значения в категории `GameObject` и, более конкретно, для семплов ` UpdateTransform`. Некоторые действия, которые необходимо предпринять в этом случае:
+
+* Culling - Отключите игровые объекты (и их компоненты), если они в данный момент не видны. Как это определяется, во многом зависит от типа игры. Для 2D-игры это может быть просто и, выражается как правило, в отключении игровых объектов, находящихся за пределами прямоугольной области. Вы можете использовать физический триггер, чтобы обнаружить это, или сгруппировав ваши объекты по корзинам. Как только вы определили, какие объекты нужно отключить или включить, вы делаете это, отправляя сообщение `disable` или `enable` каждому игровому объекту. 
+
+
+## Оптимизация использования памяти
+Этот раздел еще не закончен. Темы, которые будут затронуты: 
+
+* [Сжатие текстур](/manuals/texture-profiles/)
+* [Динамическая загрузка коллекций](https://www.defold.com/manuals/collection-proxy/)
+* [Динамическая загрузка фабрик](https://www.defold.com/manuals/collection-factory/#dynamic-loading-of-factory-resources)
+* [Профилирование](/manuals/profiling/)
+
+
+## Оптимизация использования батареи
+Этот раздел еще не закончен. Темы, которые будут затронуты: 
+
+* Запуск кода каждый кадр
+* Акселерометр на мобильном устройстве
+* [Профилирование](/manuals/profiling/)

+ 141 - 0
docs/ru/manuals/profiling.md

@@ -0,0 +1,141 @@
+---
+title: Профилирование в Defold
+brief: Это руководство объясняет возможности профилирования, имеющиеся в Defold. 
+---
+
+# Профилирование
+
+Defold включает набор инструментов профилирования, интегрированных с движком и конвейером сборки. Они предназначены для поиска проблем с производительностью и использованием памяти. Встроенные профилировщики доступны только в отладочных сборках. 
+
+## Визуальный профилировщик среды выполнения
+
+Отладочные сборки включают визуальный профилировщик среды выполнения, который оперативно показывает информацию, отображаемую поверх работающего приложения: 
+
+```lua
+function on_reload(self)
+    -- Toggle the visual profiler on hot reload.
+    profiler.enable_ui(true)
+end
+```
+
+![Визуальный профилировщик](images/profiling/visual_profiler.png)
+
+Визуальный профилировщик предоставляет ряд различных функций, которые можно использовать для изменения способа отображения данных: 
+
+```lua
+
+profiler.set_ui_mode()
+profiler.set_ui_view_mode()
+profiler.view_recorded_frame()
+```
+
+Обратитесь к [справочнику по API профилировщика](/ref/stable/profiler/) для получения дополнительной информации о функциях профилировщика. 
+
+## Веб-профилировщик
+
+При запуске отладочной сборки игры интерактивный веб-профилировщик может быть доступен через браузер. Это позволяет вам замерить вашу игру на серии кадров, а затем детально анализировать каждый кадр. 
+
+Чтобы получить доступ к профилировщику:
+
+1. Запустите игру на целевом устройстве. 
+2. Выберите меню <kbd> Debug ▸ Open Web Profiler</kbd>. В качестве альтернативы, например, когда вы используете несколько платформ одновременно, вы можете открыть веб-браузер и указать в нем `http://<device IP>:8002`, где `<device IP>` - это IP-адрес устройства. Вы можете найти IP-адреса ваших целевых устройств в меню <kbd>Project ▸ Target</kbd>. Если вы запускаете игру на настольном компьютере, http://localhost:8002 ведет на профилировщик. 
+
+![Режим веб-профилировщика](images/profiling/webprofiler_mode.png)
+Вверху, рядом с кнопкой *Capture*, есть переключатели для переключения между *CPU/Frame profiler* и *Resource Profiler*. 
+
+### CPU/Frame profiler
+CPU profiler разделен на 4 раздела, каждый из которых дает разные представления о текущих данных выборки. Чтобы обновить образцы данных, нажмите кнопку *Capture* вверху.
+
+![Веб-профилировщик](images/profiling/webprofiler_page.png)
+
+Обзор фреймов
+: Обзор фреймов отображает 20 выбранных в настоящий момент кадров один за другим. Высота каждой полосы показывает время, проведенное в кадре. Число с левой стороны показывает максимальное время, проведенное в кадре в текущих данных выборки. 
+
+  ![Обзор фреймов](images/profiling/webprofiler_frames_overview.png)
+
+  Под обзором фреймов находится подробное представление данных фрейма.
+  
+  Щелкните полосу фрейма в обзоре, чтобы отобразить данные для этого конкретного фрейма в окне просмотра данных. 
+
+Данные кадра
+: Представление данных кадра является таблицей, в которой все данные для текущего выбранного кадра разбиты на детали. Вы можете посмотреть, сколько миллисекунд потрачено в каждой области действия движка (слева), а также увидеть точки выборки в пределах областей (средний столбец). Справа - таблица счетчиков. Они упрощают, например, отслеживание количества вызовов отрисовки, необходимых для каждого кадра в выборке данных.
+
+  ![Данные кадра](images/profiling/webprofiler_frame_data.png)
+
+  Установка флажка, связанного с точкой выборки или счетчиком, добавляет эти данные на график ниже.
+
+График кадров
+: Представление графика кадров отображает график по всем выбранным кадрам с данными, которые вы выбрали в таблице данных кадра над графиком. График показывает номер кадра по оси X и время (в миллисекундах) или количество по оси Y. Каждая выбранная точка данных отображается в цвете, указанном в таблице данных фрейма.
+
+  ![График кадров](images/profiling/webprofiler_frames_plot.png)
+
+Временная диаграмма кадра
+: Временная диаграмма кадра визуально разбивает кадр, что упрощает анализ того, где движок проводит свое время в течение выбранного кадра. 
+
+  ![Временная диаграмма кадра](images/profiling/webprofiler_frame_timechart.png)
+
+### Профилировщик ресурсов
+Профилировщик ресурсов поделен на 2 раздела, один из которых показывает иерархическое представление коллекций, игровых объектов и компонентов, инстанцированных в текущий момент в вашей игре, а другой показывает все загруженные в данный момент ресурсы. 
+
+![Профилировщик ресурсов](images/profiling/webprofiler_resources_page.png)
+
+Collection view
+: В Collection view отображается иерархический список всех игровых объектов и компонентов, созданных в данный момент в игре, и из какой коллекции они происходят. Это очень полезный инструмент, когда вам нужно вникнуть и понять, что вы использовали в своей игре в любой момент времени и откуда берутся объекты.
+
+Resources view
+: В Resources view отображаются все ресурсы, загруженные в память в настоящий момент, их размер и количество ссылок на каждый ресурс. Это полезно при оптимизации использования памяти в вашем приложении, когда вам нужно понять, что загружается в память в любой момент времени.
+
+## Отчеты о сборке
+
+При бандлинге вашей игры есть возможность создать отчет о сборке. Это очень полезно, чтобы получить представление о размере всех ассетов, входящих в бандл вашей игры. Просто установите флажок *Generate build report* при бандлинге игры. 
+
+![build report](images/profiling/build_report.png){srcset="images/profiling/[email protected] 2x"}
+
+Сборщик создаст файл с именем «report.html» рядом с бандлом игры. Откройте файл в веб-браузере, чтобы изучить отчет: 
+
+![build report](images/profiling/build_report_html.png){srcset="images/profiling/[email protected] 2x"}
+
+Раздел *Overview* дает общую визуальную разбивку размера проекта в зависимости от типа ресурса.
+
+Раздел *Resources* показывает подробный список ресурсов, которые вы можете отсортировать по размеру, степени сжатия, шифрованию, типу и имени каталога. Используйте поле «search» для фильтрации отображаемых записей ресурсов. 
+
+Раздел *Structure* показывает размеры в зависимости от того, как ресурсы организованы в файловой структуре проекта. Записи имеют цветовую кодировку от зеленого (легкий) до синего (тяжелый) в зависимости от относительного размера файла и содержимого каталога. 
+
+## Внешние инструменты
+
+В дополнение к встроенным инструментам доступен широкий спектр бесплатных высококачественных инструментов трассировки и профилирования. Ниже приведена их подборка:
+
+ProFi (Lua)
+: Мы не поставляем никаких встроенных профилировщиков Lua, но есть внешние библиотеки, которые достаточно просты в использовании. Чтобы узнать, на что ваши скрипты тратят время, либо вставьте замеры времени в свой код самостоятельно, либо используйте библиотеку профилирования Lua, такую как ProFi. 
+
+  https://github.com/jgrahamc/ProFi
+
+  Обратите внимание, что профилировщики на чистом Lua добавляют довольно много накладных расходов с каждым устанавливаемым хуком. По этой причине вам следует немного опасаться временных профилей, которые вы получаете такими инструментами. Однако профили подсчета (Counting profiles) достаточно точны. 
+
+Instruments (macOS и iOS) 
+: Это анализатор производительности и визуализатор, который является частью Xcode. Он позволяет отслеживать и проверять поведение одного или нескольких приложений или процессов, изучать определенные функции устройства (например, Wi-Fi и Bluetooth) и многое другое. 
+
+  ![instruments](images/profiling/instruments.png){srcset="images/profiling/[email protected] 2x"}
+
+OpenGL profiler (macOS)
+: Часть пакета "Additional Tools for Xcode", который можно загрузить из Apple (выберите <kbd>Xcode ▸ Открыть инструмент разработчика ▸ Дополнительные инструменты разработчика ...</kbd> в меню Xcode).
+
+   Этот инструмент позволяет вам анализировать работающее Defold приложение и увидеть, как оно использует OpenGL. Он позволяет вам отслеживать вызовы функций OpenGL, устанавливать точки останова для функций OpenGL, исследовать ресурсы приложения (текстуры, программы, шейдеры и т. д.), просматривать содержимое буфера и проверять другие аспекты состояния OpenGL. 
+
+  ![opengl profiler](images/profiling/opengl.png){srcset="images/profiling/[email protected] 2x"}
+
+Android Profiler (Android)
+: https://developer.android.com/studio/profile/android-profiler.html
+
+  Набор инструментов профилирования, который в реальном времени собирает данные о процессоре, памяти и сетевой активности вашей игры. Вы можете выполнять отслеживание выполнения кода методов на основе семплирования, захватывать heap дампы, просматривать выделение памяти и изучать детали файлов, передаваемых по сети. Для использования этого инструмента необходимо установить `android:debuggable="true"` в файле "AndroidManifest.xml". 
+
+  ![android profiler](images/profiling/android_profiler.png)
+
+  Примечание. Начиная с Android Studio 4.1, также можно [запускать инструменты профилирования без запуска самой Android Studio](https://developer.android.com/studio/profile/android-profiler.html#standalone-profilers). 
+
+Graphics API Debugger (Android)
+: https://github.com/google/gapid
+
+  Это набор инструментов, который позволяет вам проверять, настраивать и воспроизводить вызовы от приложения к графическому драйверу. Для использования этого инструмента необходимо установить `android:debuggable="true"` в "AndroidManifest.xml". 
+
+  ![graphics api debugger](images/profiling/gapid.png)

+ 20 - 0
docs/ru/manuals/refactoring.md

@@ -0,0 +1,20 @@
+---
+title: Рефакторинг
+brief: В этом руководстве рассказывается, как легко изменить структуру проекта с помощью мощного рефакторинга. 
+---
+
+# Рефакторинг
+
+Рефакторинг относится к процессу реструктуризации существующего кода и ассетов. Во время разработки проекта часто возникает необходимость что-то изменить или переместить: необходимо изменить имена, чтобы соответствовать соглашениям об именованиях или для повышения читабельности, а код или файлы ресурсов необходимо переместить в более логичное место в иерархии проекта. 
+
+Defold помогает эффективно выполнять рефакторинг, отслеживая использование ресурсов. Он автоматически обновляет ссылки на переименованные и/или перемещенные ассеты. Как разработчик, вы должны чувствовать полную свободу в своей работе. Ваш проект - это гибкая структура, которую вы можете менять по своему желанию, не опасаясь, что все сломается и развалится на части. 
+
+::: important
+Автоматический рефакторинг будет работать только в том случае, если изменения вносятся из редактора. Если вы переименуете или переместите файл за пределами редактора, любые ссылки на этот файл не будут автоматически изменены. 
+:::
+
+Однако, если вы нарушите ссылку, например, удалив ассет, редактор не сможет решить проблему, но подаст полезные сигналы об ошибках. Например, если вы удалите анимацию из атласа, и эта анимация где-то используется, Defold сообщит об ошибке при попытке запустить игру. Редактор также отметит, где возникают ошибки, чтобы помочь вам быстро найти проблему: 
+
+![Ошибка рефакторинга](images/workflow/delete_error.png){srcset="images/workflow/[email protected] 2x"}
+
+Ошибки сборки отображаются на панели *Build Errors* в нижней части редактора. <kbd>Двойной щелчок</kbd> по ошибке перебросит вас к месту, где возникла проблема.

+ 84 - 0
docs/ru/manuals/version-control.md

@@ -0,0 +1,84 @@
+---
+title: Контроль версий
+brief: В этом руководстве рассказывается, как работать со встроенной системой контроля версий.
+---
+
+# Контроль версий
+
+Defold создан для небольших команд, которые в тесном сотрудничестве работают над созданием игр. Члены команды могут работать параллельно над одним и тем же контентом с минимальным пересечением. Defold имеет встроенную поддержку контроля версий на базе [Git](https://git-scm.com). Git разработан для распределенной совместной работы и представляет собой чрезвычайно мощный инструмент, позволяющий реализовать широкий спектр рабочих процессов. 
+
+## Измененные файлы 
+
+Когда вы сохраняете изменения в своей локальной рабочей копии, Defold отслеживает все изменения в панели редактора *Changed Files*, перечисляя каждый файл, который был добавлен, удален или изменен.
+
+![измененные файлы](images/workflow/changed_files.png){srcset="images/workflow/[email protected] 2x"}
+
+Выберите файл в списке и нажмите <kbd>Diff</kbd>, чтобы просмотреть изменения, которые вы внесли в файл, или <kbd>Revert</kbd>, чтобы откатить все изменения и восстановить файл до состояния, которое он имел после последней синхронизации. 
+
+## Синхронизация
+
+::: important
+Синхронизацию проекта также можно выполнить с помощью одного из множества отличных внешних инструментов для работы с Git репозиториями. [GitHub Desktop](https://desktop.github.com/), [GitTower](https://www.git-tower.com), [Git Kraken](https://www.gitkraken.com/git-client) и [SourceTree](https://www.sourcetreeapp.com/) - одни из наиболее популярных. 
+:::
+
+Синхронизация проекта означает, что файлы проекта синхронизируются с состоянием проекта на удаленном сервере. Вам следует выполнять синхронизацию, если: 
+
+1. Вы хотите привести свой проект в соответствие с тем, что хранится на сервере.
+2. Вы хотите поделиться своими локальными изменениями проекта с другими членами команды, зафиксировав и отправив свои изменения на сервер.
+
+Чтобы начать синхронизацию, выберите в меню пункт <kbd>File ▸ Synchronize</kbd>. Последовательность диалогов проведет вас через процесс синхронизации. 
+
+![Начать синхронизацию](images/workflow/sync.png)
+
+Нажмите <kbd>Pull</kbd>, чтобы получить изменения с сервера и слить их с вашими локальными изменениями. Если есть конфликты, система попросит вас разрешить их: 
+
+![Resolve](images/workflow/resolve.png)
+
+Отметьте каждый конфликтующий файл, щелкните правой кнопкой мыши и выберите действие, которое нужно предпринять: 
+
+View Diff
+: Вывести текстовое представление различий вашей и серверной версии файла. 
+
+  ![diff view](images/workflow/diff.png)
+
+  Слева находится файл, полученный с сервера. Справа показана ваша локальная версия. Любые различия четко выделены, так что вы можете быстро их просмотреть.
+
+   Встроенный инструмент сравнения файлов работает только с текстовыми файлами. Однако, поскольку Defold хранит все рабочие файлы (игровые объекты, коллекции, атласы и т. д.) в легко читаемых файлах JSON, вы зачастую сможете понять смысл изменений, которые были внесены в такие файлы: 
+
+Use Ours
+: Отменить изменения с сервера и вместо этого использовать вашу версию.
+
+Use Theirs
+: Выкинуть свою версию и использовать вместо нее версию сервера. 
+
+::: sidenote
+Редактор не позволяет точечно отбирать изменения из обоих конфликтующих файлов. Если вам нужно это сделать, вы можете выполнять Git операции из командной строки и использовать отдельный инструмент слияния. 
+:::
+
+Когда редактор закончит с подтягиванием изменений и все конфликты будут разрешены, появится диалоговое окно с вопросом, как действовать дальше. 
+
+![стягивание завершено](images/workflow/push.png)
+
+* Нажмите <kbd>Cancel</kbd>, чтобы прервать операцию и вернуть проект в состояние, в котором он находился до синхронизации.
+* Нажмите <kbd>Push</kbd>, чтобы продолжить с фиксацией и публикацией ваших изменений на сервер.
+* Нажмите <kbd>Done</kbd>, чтобы принять изменения с сервера и разрешения конфликтов, но без последующей публикации. Вы всегда можете опубликоваться на сервер на более позднем этапе. 
+
+Если вы продолжаете публикацию и имеете локальные изменения, вас попросят зафиксировать (commit) их перед публикацией (push-ем). Диалоговое окно позволяет вам выбрать (подготовить) файлы, которые должны быть включены в коммит (обведено оранжевой рамкой на изображении ниже).
+
+![stage](images/workflow/stage.png)
+
+Нажмите <kbd>Push</kbd>, чтобы зафиксировать и отправить изменения на сервер. 
+
+## Git
+
+Инструмент Git создан в первую очередь для обработки исходного кода и текстовых файлов и хранит эти типы файлов с минимальными издержками. Сохраняются только изменения (дельты) между каждой версией, что означает, что вы можете вести обширную историю изменений всех файлов вашего проекта с относительно небольшими затратами. Однако двоичные файлы, такие как изображения или звуковые файлы, не получают преимуществ от схемы хранения Git. Каждая новая версия, которую вы регистрируете и синхронизируете, занимает примерно одно и то же место. Обычно это не является серьезной проблемой с конечными ассетами проекта (изображения JPEG или PNG, звуковые файлы OGG и т. д.), н может быстро стать проблемой с рабочими файлами проекта (файлы PSD, проекты Protools и т. д.). Эти типы файлов часто сильно разрастаются в объеме, поскольку вы обычно работаете с гораздо более высоким разрешением, чем целевые ресурсы. Обычно считается, что лучше избегать передачи больших рабочих файлов для Git версионирования и вместо этого использовать для них отдельное хранилище и решение для резервного копирования.
+
+Есть много способов использовать Git в командном рабочем процессе. Defold использует его таким образом. При синхронизации происходит следующее: 
+
+1. Все локальные изменения хранятся в stash-е (stash-атся), поэтому их можно восстановить, если что-то выйдет из строя позже в процессе синхронизации.
+2. Стягиваются серверные изменения.
+3. Применяется stash с предыдущего шага (восстанавливаются локальные изменения), это может привести к конфликтам слияния, которые необходимо разрешить.
+4. Пользователь получает возможность зафиксировать любые изменения в локальном файле.
+5. Если есть локальные коммиты, пользователь может отправить их на сервер. Опять же, возможна ситуация, что это приведет к конфликтам, которые необходимо разрешить. 
+
+Если вы предпочитаете другой рабочий процесс, вы можете запустить Git из командной строки или через стороннее приложение для выполнения операций стягивания, публикации, фиксации и слияния, работы с несколькими ветками и т. д. 

+ 54 - 0
docs/ru/manuals/working-offline.md

@@ -0,0 +1,54 @@
+---
+title: Работа в оффлайне 
+brief: В этом руководстве описывается, как работать в оффлайне в проектах, содержащих зависимости и, в частности, нативные расширения. 
+---
+
+# Работа в оффлайне
+
+Defold в большинстве случаев не требует подключения к Интернету для работы. Однако есть несколько ситуаций, когда требуется подключение к Интернету: 
+
+* Автоматические обновления
+* Отправка отчетов о проблемах
+* Стягивание зависимостей
+* Сборка нативных расширений 
+
+
+## Автоматические обновления
+
+Defold будет периодически проверять наличие новых обновлений. Проверки обновлений Defold выполняются для [официального сайта загрузки](https://d.defold.com). Если обнаружено обновление, оно будет загружено автоматически. 
+
+Если у вас есть подключение к Интернету только в течение ограниченного периода времени и вы не хотите ждать запуска автоматического обновления, вы можете вручную загрузить новые версии Defold с [официального сайта загрузки](https://d.defold.com).
+
+
+## Отправка отчетов о проблемах
+
+Если вами была обнаружена проблема в редакторе, вы можете сообщить о проблеме в баг-трекер Defold. Баг-трекер [хостится на GitHub](https://www.github.com/defold/editor2-issues), что означает, что вам нужно подключение к Интернету, чтобы сообщить о проблеме.
+
+Если вы столкнулись с проблемой будучи оффлайн, вы можете вручную сообщить об этом позже, используя опцию [Report Issue в меню «Help»](/manuals/getting-help/#report-a-problem-from-the-editor) редактора.
+
+## Подгрузка зависимостей
+
+Defold поддерживает систему, в которой разработчики могут обмениваться кодом и ассетами через так называемые [Library Projects](/manuals/libraries/). Библиотеки - это zip-файлы, которые можно хостить в любом месте в Интернете. Обычно library-проекты под Defold можно найти на GitHub и других онлайн-репозиториях исходного кода. 
+
+В проект можно добавить библиотеку как [зависимость в настройках проекта](/manuals/project-settings/#dependencies). Зависимости загружаются/обновляются при открытии проекта или в любое время, когда в меню *Project* выбрана опция *Fetch Libraries*.
+
+Если вам нужно работать в автономном режиме и в нескольких проектах, вы можете заранее выкачать зависимости, а затем поделиться ими с помощью локального сервера. Зависимости с GitHub обычно доступны на вкладке Releases конкретного репозитория проекта: 
+
+![GitHub Library URL](images/libraries/libraries_library_url_github.png)
+
+Можно использовать Python для простого создания локального сервера: 
+
+    python -m SimpleHTTPServer
+
+Эта команда создаст сервер в текущем каталоге, обслуживающий файлы по адресу `localhost:8000`. Если текущий каталог содержит загруженные зависимости, вы можете добавить их в свой файл *game.project*: 
+
+    http://localhost:8000/extension-fbinstant-4.1.1.zip
+
+
+## Сборка нативных расширений
+
+Defold поддерживает систему, в которой разработчики могут добавлять нативный код для расширения функциональности движка с помощью системы под названием [Native Extensions](/manuals/extensions/). Для нативных расширений Defold предоставляет для сборки простейшую точку входа без каких-либо шагов по установке в виде облачного решения.
+
+При первой сборке проекта, когда проект содержит нативное расширение, нативный код будет скомпилирован и встроен в кастомизированный игровой движок Defold на серверах сборки Defold и отправлен обратно на ваш компьютер. Кастомизированный движок будет кэшироваться в вашем проекте и повторно использоваться для последующих сборок, пока вы не добавляете, не удаляете или не изменяете какие-либо нативные расширения и пока вы не обновляете редактор. 
+
+Если вам нужно работать в оффлайн режиме и ваш проект содержит нативные расширения, вы должны убедиться, что собрали свой проект успешно, по крайней мере, один раз, чтобы быть уверенными, что ваш проект содержит кэшированную копию кастомизированного движка.