Как Процесс выполнения программы GUI и Игры по сравнению с веб-программами

Когда браузер получает ответ, функция обратного вызова, переданная в .done(), добавляется в очередь цикла событий JavaScript.

Во время обработки данных он блокирует цикл обработки событий JavaScript для обработки дальнейших задач. Даже такие вещи, как обработка ввода мыши, тем временем блокируются. Если обрабатываемые данные слишком велики, они становятся более заметными для конечного пользователя.

Вы можете разделить полученные данные на куски и раздать их в цикл событий отдельно, вызвав для них setTimeout(). Источник: Сотрудничающая часть You Not Know JS: Async & amp; Производительность

Вот как это может работать для вашего кода ниже: функция обратного вызова, переданная в .done(), и вспомогательная функция:

function(data) {
    var ht = "";
    $("#js_res").append(ht);
    processData(data, 1);
    $("body").css("cursor", "default");
}

function processData(data, no) {
    var chunk = data.splice(0, 100);
    var ht = "";

    $.each(chunk, function(key, val) {
        ht +=""+""+""+""+""+""+"";
        if (val.image) {
            ht += "";
        }else{
             ht += "";
        }
        ht +="";
        ht += "";
        ht += "";
        ht += "";
        no++;
    });

    $("#js_res").append(ht);
    if (data.length > 0) {
        setTimeout(function(){
            processData(data, no);
        }, 0);
    }
}

6
задан Argalatyr 11 July 2009 в 03:16
поделиться

3 ответа

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

Если Вы предпринимаете шаги назад, Ваши веб-приложения базируются вокруг цикла - веб-сервер accept() цикл:

while(listening) {
     get a socket connection;
     handle it;
}

.. но как Веб-разработчик, Вы экранируетесь от этого и пишете 'управляемый событиями' код - 'когда кто-то запрашивает этот URL, сделайте this'.

Графический интерфейсы пользователя также управляемы событиями, и события также обнаруживаются циклом где-нибудь:

while(running) {
    get mouse/keyboard/whatever event
    handle it
}

Но разработчик GUI не должен думать о цикле очень. Они пишут, 'когда щелчок мышью происходит здесь, сделайте this'.

Игры, снова то же. Кто-то должен записать цикл:

while(game is in progress) {
    invoke every game object's 'move one frame' method;
    poll for an input event;
}

... в то время как другой код написан в более событийно-ориентированном стиле: 'когда объект маркера совпадет с этим объектом, инициируйте событие взрыва'.

14
ответ дан 8 December 2019 в 14:48
поделиться

Насколько игровое программирование пошло, я был просто человеком, увлеченным своим хобби, однако это - то, что я обычно делал:

У меня был объект, который представил очень универсальное понятие "Сцены" в игре. Все различные главные разделы игры получены из этого объекта Сцены. Сцена могла действительно быть чем-либо, в зависимости от того, какая игра это. Так или иначе каждая более определенная сцена, которая произошла из сцены, имела процедуру для Загрузки всех необходимых элементов для той сцены.

Когда игра должна была изменить сцены, указатель на активную сцену был установлен на новую сцену, которая затем загрузит все ее необходимые объекты.

Универсальный объект Сцены имел виртуальные функции, такие как Загрузка, Потяните, и Логика, которые назвали в конкретные времена в игровом цикле от активного указателя сцены. Каждая определенная сцена имела свои собственные способы реализовать эти методы.

Я не знаю, является ли это то, как это, как предполагается, сделано или нет, но это был очень простой способ ко мне управлять потоком вещей. Понятие сцены также помогло сохранить несколько сцен как наборы. С несколькими указателями сцены, сохраненными в своего рода стеке когда-то, сцены могли быть сохранены в резерве и поддержать свое полное состояние при возврате к, или даже сделайте вещи как тусклый, но продолжать тянуть, в то время как активная сцена дистиллировала их как своего рода наложение.

Так так или иначе, если Вы делаете это как то, что это точно не похоже на веб-страницу, но я предполагаю, думаете ли Вы об этом правильный способ, которым это достаточно подобно.

1
ответ дан 8 December 2019 в 14:48
поделиться

Для приложений и до меньшей степени Играет, программное обеспечение управляемо событиями. Пользователь делает "что-то" с клавиатурой или мышью, и то событие отправляется в остальную часть программного обеспечения.

В Играх Игровой Цикл важен, потому что фокусируется на обработке экрана и игрового состояния. Со многими Играми, бывшими нужными в оперативной производительности. С современной 3D Графикой API большая часть экранной обработки может быть выведенной на GPU. Однако Игровое состояние прослежено основным циклом. Большая часть усилия команды для игры фокусируется на создании обработки очень гладкого цикла.

Для приложения обычно тяжелая обработка порождена на на поток. Это - сложный предмет из-за проблем, окружающих две вещи, пытающиеся получить доступ к тем же данным. Существуют целые книги по предмету.

Для приложений последовательность

  1. пользователь делает X, X, и связанная информация (как X, Y координаты) отправляется в UI_Controller.
  2. UI решает который команда выполниться.
  3. Команда Выполняется.
  4. Модель/данные изменяется.
  5. Команда говорит UI_Controller обновлять различные области UI.
  6. UI_Controller перерисовывает UI.
  7. Возвраты Команды.
  8. Приложение ожидает следующего события.

Существует несколько вариантов этого. Модель может позволить слушателям ожидать изменений в данных. Когда данные слушатель выполняется, и перерисовывает UI.

1
ответ дан 8 December 2019 в 14:48
поделиться
Другие вопросы по тегам:

Похожие вопросы:

NoNameCodeMin qtyuniGroupSub CategoryPart NumberLocationImageTyreBack
"+no+""+val.name+""+val.code+""+val.min_qty+""+val.unit+""+val.group+""+val.sub_category+""+val.part_number+""+val.location+"/"+val.image+"'>"+val.tyre+""; if (val.reusable == 1) { ht +="yes"; }else{ ht+="no"; }; ht += "