Как ускорить загрузку конечной точки? - PullRequest
0 голосов
/ 29 апреля 2019

Я новичок в couchbase и, возможно, в программировании внешнего интерфейса. У меня есть кусок кода, который создает объект базы данных couchbase, а затем получает представление из базы данных. Проблема заключается в том, что он получает все данные с начала времени, которое имеет база данных. Моя задача - сделать так, чтобы это быстрее отображалось на сайте. Вот кусок кода

@app.route("/all-schools", methods=['GET'])
def past_school_schedules():

    return render_template('schb.get_view('cloud', 'christmast-past'))

Так что, как только couchbase извлекает все виды и отображает их, это занимает около 30-40 секунд ... что огромно, так как оно отображает темп

1 Ответ

1 голос
/ 29 апреля 2019

Используйте разбиение на страницы для рендеринга данных небольшими партиями, определите размер страницы в соответствии с вашими требованиями, чтобы у вас было достаточно данных для обработки / отображения в пользовательском интерфейсе при первом вызове, и выполните последующий вызов, чтобы получить еще больше данных по запросу, используя next_page_url.

Flask-SQLAlchemy изначально поддерживает разбиение на страницы с помощью метода запроса paginate ()

Метод paginate можно вызывать для любого объекта запроса из Flask-SQLAlchemy.Он принимает три аргумента:

  1. номер страницы, начиная с 1
  2. количество элементов на странице
  3. флаг ошибки.Если True, когда запрашивается страница вне диапазона, ошибка 404 будет автоматически возвращена клиенту.Если False, пустой список будет возвращен для страниц вне диапазона.

Возвращаемое значение из paginate - это объект Pagination.Атрибут items этого объекта содержит список элементов на запрашиваемой странице.

Ниже приведен обновленный код с использованием нумерации страниц.

@app.route("/all-schools-schedule/christmas-past", methods=['GET'])
def past_school_schedules():
    # this creates couchbase object
    cb = get_db().paginate(
        page, POSTS_PER_PAGE, False)
        return render_template('school_schedule.html', past=cb.items)

Надеюсь, это поможет!

...