1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/jianyumofa-qyscript

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Интерпретатор скриптов TypeScript, работающий в среде JavaScript. Технология горячего обновления кода для небольших игр на примере WeChat.

  1. В среде выполнения JavaScript можно запускать код TypeScript.
  2. Проблемы с производительностью: обычно проблем с производительностью игры не возникает. Если требуются высокие показатели производительности, рекомендуется создать высокопроизводительный код в виде библиотечного файла. В конце есть грубый тест производительности.
  3. Проблема с размером кода: поскольку код необходимо загружать с сервера, в настоящее время не реализовано компилирование в байт-код. На данный момент можно использовать jsmin для простого сжатия.
  4. Между «холодным» кодом (исходным кодом JavaScript) и «горячим» кодом (кодом, который можно обновлять в горячем режиме, TypeScript) нет песочницы, они могут вызывать друг друга и наследовать методы.
  5. Не нужно беспокоиться о скорости обработки строк, потому что лексический и синтаксический анализ выполняется только один раз. После завершения анализа классы TypeScript преобразуются в объекты JavaScript (Function). Поэтому также не стоит беспокоиться о памяти.

Описание проекта egret_demo:

  1. Проект включает простую игру и функции, такие как публикация плагинов (необходимо использовать формат commonjs2, так как exml также требует горячего обновления), горячее обновление ресурсов (реализовано загрузка, распаковка и кэширование всех файлов в Start.ts) и горячее обновление кода (требуется самостоятельная настройка сервера и реализация в основном файле queryCode).

  2. Для горячего обновления ресурсов достаточно выполнить команду egret publish --target wxgame, а затем упаковать файлы ресурсов в zip-архив в каталоге с расширением remote.

  3. Пример горячего обновления кода представлен в Main.ts.

  4. При отправке на проверку рекомендуется также скомпилировать логику горячего обновления в JavaScript. После прохождения проверки, при необходимости выпуска новой версии, сервер переключается на использование кода горячего обновления, и ресурсы также упаковываются в zip-файл.

Проект cocos_demo:

  1. cocos_demo содержит базовый пример динамического выполнения кода.

Демонстрационный проект Laya Engine пока недоступен.

Следующие функции ещё не реализованы (будут реализованы позже):

  • лямбда-выражения в форме анонимных функций, например ()=>{console.log(this)};
  • await/async и yield;
  • преобразования типов, рекомендуется использовать as вместо obj;
  • дженерики, например class A{};
  • регулярные выражения (рекомендуется использовать new RegExp);
  • определение перед super в конструкторе, например var a=2;super();
  • перечисления и пользовательские значения перечислений;
  • интерфейсы;
  • for of;
  • декораторы — @;
  • проблемы с получением значений из родительских модулей, если родительский модуль имеет несколько уровней, решение проблемы — избегать использования модулей или вызовов внутри одного модуля, например new test.Start(), а не new Start();
  • максимум два неарифметических оператора перед переменной, например, var a = !!"123";
  • неправильная информация об ошибках во время выполнения;
  • компиляция в байт-код;
  • строки, представленные символами `` (символ слева от клавиши 1 на клавиатуре);
  • импорт {A} из './B.ts';

Пример:

qs.run(`
            class Start{
                public constructor() {
                    console.log('你好,世界!');
                }
            }
        `, 'Start', window);//если весь код объединён в одном файле, этот способ более удобен. Если код фрагментирован, лучше использовать следующий способ:

Другой способ:

var runTime = new qs.RunTime(window);//создать объект времени выполнения
runTime.regedit(`class Test{public constructor(){console.log('Ты хороший, мир!')}}`);//зарегистрировать класс Test
runTime.regedit(`class Start{public constructor(){new Test()}}`);//зарегистрировать класс Start
new runTime.g.Start();//создать экземпляр класса Start, в некоторых случаях можно просто использовать new Start();

С 26 марта доступно обновление только определённых методов или классов. Реализация находится в egret проекте в UpdateFunction и UpdateClass. Рекомендуется использовать локальное обновление, а не полное горячее обновление.

Результаты сравнительного тестирования производительности:

На устройстве Huawei Mate20: введите сюда описание изображения

На ПК с использованием Unity и трёх популярных решений для горячего обновления (scorpio, lua, cls): введите сюда описание изображения

Результаты сравнения производительности:

Исходный код JavaScript оптимизирован для циклов for, поэтому его производительность высока. Можно проверить это, выполнив цикл 100 миллионов раз без реализации for. Сравнение с несколькими популярными решениями для горячего обновления в Unity показывает, что 1 миллион вычислений не уступает им по производительности. Однако только циклы и вычисления не дают полной картины. Тестирование производительности лишь отражает некоторые аспекты, а не всю картину. В целом, как и решения для горячего обновления в Unity, оно не может полностью заменить исходный код.

В заключение: по просьбам пользователей, в спешке публикуется предварительная версия, которая не является идеальной и может содержать неизвестные ошибки. Тем не менее, она подходит для обычного развития. Разработчики с навыками могут попробовать её.

Из-за самостоятельной предпринимательской деятельности и большого количества дел в компании, у автора ограничено время. Библиотека ещё не полностью доработана. Если есть проблемы, пожалуйста, поймите ситуацию. Когда компания встанет на ноги, автор обязательно будет тщательно поддерживать эту библиотеку.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Интерпретатор TypeScript-скриптов, работающих в среде JavaScript, технология горячего обновления кода для небольших игр на WeChat. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/jianyumofa-qyscript.git
git@api.gitlife.ru:oschina-mirror/jianyumofa-qyscript.git
oschina-mirror
jianyumofa-qyscript
jianyumofa-qyscript
master