Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Двойная (каскадная) шаблонизация

Двойная (каскадная) шаблонизация

Сергей Еремин (oknardia.ru) @ Moscow Python №42

" Бывает, что часть данных в БД обновляется редко, запросы к ним «тяжелые», но при каждом обращении клиента их требуется отображать. Спикер расскажет, как сделать, чтобы «тяжёлый» шаблон при первом вызове создавал другие «легкие» шаблоны с «пререндером» редко обновляемых данных. При последующих вызовах исполняются «легкие» шаблоны, что позволяет драматически снизить нагрузку на сервер".

Видео: http://www.moscowpython.ru/meetup/42/double-template/

Moscow Python Meetup
PRO

January 19, 2017
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Двойная шаблонизация
    в Django

    View Slide

  2. или

    View Slide

  3. Кеширование с помощью
    шаблонов в Django

    View Slide

  4. или даже

    View Slide

  5. Многоуровневое
    кеширование с посредством
    каскадной шаблонизации
    в Django

    View Slide

  6. или

    View Slide

  7. Как применить в хозяйстве:
    {% templatetag openvariable %}
    и
    {% templatetag closevariable %}
    а еще
    {% templatetag openblock %}
    и
    {% templatetag closeblock %}

    View Slide

  8. View Slide

  9. на всякий случай:
    {% templatetag openblock %} → {%
    {% templatetag closeblock %} → %}
    {% templatetag openvariable %} → {{
    {% templatetag closevariable %} → }}

    View Slide

  10. View Slide

  11. View Slide

  12. View Slide

  13. 3090 ms →
    11 запросов
    ← 1024 ms
    ← 770 ms
    django-debug-toolbar

    View Slide

  14. почти не меняются
    крайне редко
    может быть меняются
    но всем пофиг
    раз в год, если повезёт
    меняются иногда

    View Slide

  15. from django.template.loader import render_to_string
    import os
    def view4report(request):
    # простые, легкие и быстрые вычисления и запросы
    data_light = 2*2 # |
    Dim = {"DATA_LIGHT": data_light} # if not os.path.isfile("C:/path_to_project/templates/LightTemplate.html"):
    # сложные, тяжелые и медленные вычисления и запросы
    data_hard = 3.1416926**3**4 # |
    Dim.update({"DATA_HARD": data_hard}) # Result = render_to_string("HardTemplate.html", Dim)
    file = open("C:/path_to_project/templates/LightTemplate.html", 'w')
    file.write(Result.encode('utf-8'))
    file.close()
    response = render(request, "LightTemplate.html", Dim)
    return response

    View Slide

  16. Часто обновляемые и «лёгкие» данные:

    {% templatetag openvariable %} DATA_LIGHT {% templatetag closevariable %}
    Редко обновляемые и «тяжёлые» данные:

    {{ DATA_HARD }}
    Часто обновляемые и «лёгкие» данные:

    {{ DATA_LIGHT }}
    Редко обновляемые и «тяжёлые» данные:

    1.8631971713448156e+40
    LightTemplate.html
    HardTemplate.html

    View Slide

  17. 525 ms →
    4 запроса
    django-debug-toolbar

    View Slide

  18. Повторим:
    {% templatetag openblock %} → {%
    {% templatetag closeblock %} → %}
    {% templatetag openvariable %} → {{
    {% templatetag closevariable %} → }}
    И помним про:
    вложенные шаблоны

    View Slide

  19. View Slide

  20. Сергей Ерёмин
    оknardia.ru
    erjemin @gmail.com
    facebook.com/erjemin

    View Slide