проблемы с производительностью при очистке данных в реальном времени с использованием веб-сервера javascript и python flask - PullRequest
1 голос
/ 15 апреля 2019

Я извлекаю постоянно обновляемые данные из тега html, используя javascript в консоли инструментов разработчика chrome, и отправляю их на веб-сервер (флакон python), чтобы иметь возможность дальнейшей обработки данных в приложении python. Проблема в том, что в 50% случаев запрос занимает менее 5 мс, НО остальные 50% времени запрос занимает около 300 мс, что слишком много, поскольку приложение, которое я собираюсь создать, чувствительно к задержке.

Как я могу сократить время, необходимое для ВСЕХ HTML-запросов POST, до менее чем 5 мс?

Код JavaScript, используемый в Chrome:

var xhr = new XMLHttpRequest();
xhr.open("POST", "http://localhost:5000/mqtt/", true);
xhr.setRequestHeader('Content-Type', 'text/plain');
console.log(Date.now());
xhr.send(Date.now().toString());

Код Python (Python 3.6):

import time
from flask import request, Flask
from flask_cors import CORS

application = Flask(__name__)
CORS(application)


@application.route('/mqtt/', methods=['POST'], strict_slashes=False)
def process_prices():
    start = time.time()
    data = request.get_data().decode("utf-8")
    time_decoding = time.time()

    print('timestamp javascript', data)
    print('timestamp python', time.time()*1000)

    print('total time: ', int((time.time()-start)*1000))
    print('decoding time: ', int((time_decoding - start) * 1000))

    return "OK"

if __name__ == '__main__':
    application.run(debug=False)

Результаты: Когда я выполняю код javascript в первый раз, разница между меткой времени, собранной в коде javascript, и меткой времени, измеренной в python, составляет около 300 мс. Если в течение 10 секунд после первого запуска я снова запускаю тот же код javascript, разница во времени уменьшается до менее чем 5 мс. Если я подожду 10-11 секунд, пока код будет запущен во второй раз, код снова займет 300 мс. если я продолжаю повторять выполнение кода javascript несколько раз каждые 2-3 секунды, каждый второй раз запрос занимает 300 мс, чтобы быть принятым сервером, а каждый второй раз - только 1-5 мс. Это заставляет меня думать, что либо chrome, либо флеш-сервер каким-то образом настраиваются таким образом, чтобы добавить дополнительную задержку, и что должна быть возможность сократить время, необходимое для ВСЕХ запросов, чтобы добраться до веб-сервера, до менее чем 5 мс, а не только половина из них.

Вывод с веб-сервера колбы:

timestamp javascript 1555342312986
timestamp python 1555342313289.659
total time:  1
decoding time:  0
127.0.0.1 - - [15/Apr/2019 17:31:53] "POST /mqtt/ HTTP/1.1" 200 -
timestamp javascript 1555342314901
timestamp python 1555342314903.6602
total time:  0
decoding time:  0
127.0.0.1 - - [15/Apr/2019 17:31:54] "POST /mqtt/ HTTP/1.1" 200 -
timestamp javascript 1555342315912
timestamp python 1555342316217.7195
total time:  1
decoding time:  0
127.0.0.1 - - [15/Apr/2019 17:31:56] "POST /mqtt/ HTTP/1.1" 200 -
...