Хобрук: Ваш путь к мастерству в программировании

Как рендерить и кэшировать пользовательские страницы?

Я создаю сайт на базе web.py, postgres и redis. В некоторых представлениях моего приложения есть некоторая пользовательская информация. Например, если пользователь вошел в систему, ссылки на верхней панели будут отличаться от представления пользователя, не вошедшего в систему, или чего-то вроде «welcome $ username». Я могу реализовать это, отображая каждую страницу в ответ на каждый запрос. За исключением информации, указанной пользователем, другие части некоторых представлений точно такие же. Итак, я хочу кэшировать обработанную страницу. Я придумал какой-то подход к реализации, но я не знаю, что использовать, и, поскольку я как бы сам изучаю веб-разработку, я хочу знать, как профессиональные веб-разработчики справляются с этой проблемой.

Вот мои подходы:

  • сохраните некоторые данные в файлах cookie и напишите фрагмент сценария javascript для управления HTML DOM после того, как страницы поступят в браузеры пользователя. таким образом, в некотором представлении моего приложения, все пользователи получают одну и ту же страницу, но данные, хранящиеся в файлах cookie, отличаются, тогда страницы, отображаемые с использованием javascript, отличаются
  • рендеринг и кеширование каждой версии некоторых страниц для каждого пользователя, но я думаю, что это не очень хорошая идея ....
  • отображать и кэшировать части страниц и создавать страницы при поступлении запроса. Я использую Templetor web.py для визуализации страниц. Есть базовый общесайтовый шаблон, который теперь работает как обертка. Если я использую этот подход к построению, вместо использования базового шаблона мне, возможно, придется визуализировать и объединять различные части страницы. Затем кешируйте соответствующие фрагменты для каждого пользователя.

Что я должен делать? Есть ли лучшие решения? Извините за мои ужасные навыки письма на английском :( Надеюсь, он сможет выразить то, что я хочу попросить. Любая помощь будет оценена и благодарим заранее! Спасибо!: D

РЕДАКТИРОВАТЬ: код, содержащий пользовательскую информацию, выглядит следующим образом

<nav>
  <div class="wrapper">
    <div class="primary">
      <ul class="nav">
        <li><span>Home</span></li>
        <li><span>About</span></li>
        <li><span>Contact</span></li>
      </ul>
    </div>

    <div class="secondary">
      $if session.logged_in:
          <span>Welcome, $session.username</span>
          <a href="/new">new post</a>
          <a href="/logout">logout</a>
      $else:
          <a href="/register">register</a>
          <a href="/login">login</a>
    </div>
  </div>
</nav>

Сейчас я использую сеанс, а это значит, что я не могу просто кэшировать одну версию для каждого пользователя. Как это реализует stackoverflow.com? Я вижу, что информация на верхней панели отличается, когда я не вошел в систему, и уверен, что знаю, что мнение каждого пользователя отличается ...


  • Вы имеете в виду кеширование HTML-страницы на стороне сервера после рендеринга? 25.06.2013
  • @Febien Да! Точно. Кешировать отображаемую страницу в Redis 25.06.2013
  • Вы можете взглянуть на Varnish. 25.06.2013
  • @Febien, спасибо. Проверяю. вроде это еще один софт для кеширования ... 25.06.2013

Ответы:


1

Оказывается, что большинство сайтов просто кэшируют данные, а не окончательный html-файл. Это намного проще в управлении и более гибкое в реализации. Хотя по-прежнему необходимо отображать страницу при каждом запросе, но может снизить нагрузку на базу данных. Что касается пользователей, не вошедших в систему, приложение может выбрать кеширование окончательной HTML-страницы. Я все думал о кешировании финального html файла. Какой я идиот ....

27.06.2013
  • Итак, как вы это делаете в web.py? Можете ли вы обновить свой ответ тем, что вы нашли? 19.08.2013
  • Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..