Nano Hash - криптовалюты, майнинг, программирование

При анализе JSON с помощью среза производительность является проблемой?

Я новичок в области JSON, и на прошлой неделе я провел много исследований по этой теме в отношении отображения только определенного количества и использования нажатия кнопки, чтобы показать счет X после первоначальной загрузки 12. Я узнал как вызвать API с помощью PHP, извлекать данные из JSON используйте оператор foreach с PHP для вывода содержимого JSON, но мне не очень повезло в окончательном ответе или объяснении, если производительность снижается, когда я использую кнопку для отображения следующего количества.

JSON, который я вызываю, содержит более 100 объектов, каждый из которых имеет до 20 значений (мое понимание терминологии после прочтения здесь) и обновляется каждый час с помощью PHP. Я подумал, что было бы неплохо отобразить первые 12 с помощью PHP после прочтения, как ограничить оператор:

$showList = 12;
$countRecords = 0;
foreach($products as $product) {
    if ($countRecords < $showList) {
        // more code
    }
    ++$countRecords;
}

и прочитать несколько вопросов, которые предлагают сделать это на стороне сервера.

После ссылки на несколько вопросов о том, как создать нажатие кнопки для загрузки следующих 12 счетчиков, я беспокоюсь, что использование .slice()< /a> будет снижать производительность, потому что похоже, что он каждый раз проходит весь файл, а затем нарезает содержимое:

Я видел другой подход, когда был добавлен скрытый класс, а кнопка удаляет класс, но не повредит ли это производительности:

другой подход с AJAX:

Я думал об изменении счетчика:

Каково подходящее выполнение для загрузки большего количества объектов нажатием кнопки Ajax, которое не задержит возврат или не помешает производительности, если у меня есть большой файл JSON или нет никакого эффекта с .slice()?


  • 100 записей с 20 ключами по 20 символов в каждой занимают примерно 100*20*20= 40 КБ памяти. Это ничто для современных компьютеров. Проблемы начинаются, когда вы начинаете перегружать браузеры десятками МБ данных. 29.03.2016

Ответы:


1

Насколько мне известно, любое решение в jQuery (или что-либо на стороне клиента) по-прежнему будет возвращать весь JSON, прежде чем вы его ограничите, и, поскольку вашей целью является производительность, это довольно бесполезно.

Вам необходимо ограничить возвращаемый JSON на стороне сервера. Вы по-прежнему можете использовать jQuery для ajax, но вместо прямого вызова вашего JSON создайте файл PHP, который ограничивает ответ.

jQuery

// set initial variables
var limit = 10;
var offset = 0;

// get data on button click
$.('#load-more').on('click', function(){
    getData();
});

function getData() {
    $.ajax({
        url:"ajax.php",
        type: "POST",
        data: { limit: limit, offset: offset },
        success: function(json) {

            // increase offset for next call
            offset++;

            // do something with your JSON
        },
   });
}

ajax.php

// get your POST variables
if( isset($_POST['limit']) ) $limit = (int)$_POST['limit'];
if( isset($_POST['offset']) ) $offset = (int)$_POST['offset'];

// get your JSON
if ( isset($limit) && isset($offset) ) {

    $from = ($offset + 1) * $limit;
    $to   = $from + $limit;

    $json = // get JSON objects $from to $to        

    echo $json;        
}

То, как вы получаете правильные результаты JSON в ajax.php, зависит от того, как вы получаете и/или храните свой JSON.

  • Если вы делаете вызов API, посмотрите, какие параметры ограничения/смещения есть у API. В зависимости от API вы можете использовать $offset и $limit или $from и $to. Если вы делаете это, вы можете сделать это прямо из своего вызова ajax.

  • Если вы храните JSON в базе данных, вы можете получить результаты с помощью запроса MYSQL.

  • Если все, что у вас есть, это одна строка/файл JSON, вы можете просмотреть ее, как ваш первый пример PHP. Что-то вроде этого:

// get your POST variables
if( isset($_POST['limit']) ) $limit = (int)$_POST['limit'];
if( isset($_POST['offset']) ) $offset = (int)$_POST['offset'];

// get your JSON
if ( isset($limit) && isset($offset) ) {

    // limit & offset
    $from = ($offset + 1) * $limit;
    $to   = $from + $limit;

    // get existing json
    $products = json_decode($existing_json, true);
    $countRecords = 0;
    $products_to_return = array();

    foreach($products as $product) {

        // skip to next product if we are before $from
        if ($countRecords < $from) continue;

        // end the loop if we are after $to
        if ($countRecords > $to) break;

        $products_to_return[] = $product;

        ++$countRecords;
    }

    // encode your new limited json
    $json = json_encode($products_to_return);

    echo $json;        
}

Примечание. Ни один из этих кодов не тестировался и вполне может быть полон ошибок (уже поздно!), но он дает вам представление о том, что делать

29.03.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..