当前位置 主页 > 网站技术 > 代码类 >

    Django之使用celery和NGINX生成静态页面实现性能优化

    栏目:代码类 时间:2019-10-13 15:02

    性能优化原理:

    当我们要给client浏览器返回一个页面时,我们需要去数据库查询数据并将数据和基本页面模板渲染形成页面返回给客户端,但如果每一个用户访问时都去查询一次首页的的数据时,当日访问量很大时那么无疑会给数据库查询带来很大的性能问题。为了解决这个问题,我们可以给未登录用户返回一个早就渲染好的静态首页(给已登录的用户返回一个调用缓存数据和个人数据渲染的页面),这样就可以提高网站的性能了。

    使用celery生成静态首页

    生成静态页面原理:

    在一个为静态首页准备的基础模板之上,获取数据,使用django的loader加载基础模板,使用render渲染页面即可生成几台页面。

    安装celery

    pip install celery

    为redis配置settings文件

    # diango的缓存配置
    CACHES = {
     "default": {
      "BACKEND": "django_redis.cache.RedisCache",
      "LOCATION": "redis://127.0.0.1:6379/9",
      "OPTIONS": {
       "CLIENT_CLASS": "django_redis.client.DefaultClient",
      }
     }
    }

    准备一个首页静态模板文件static_base.html

    {# 首页 注册 登录 #}
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    {% load staticfiles %}
    <head>
     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
     {# 网页标题内容块 #}
     <title>{% block title %}{% endblock title %}</title>
     <link rel="stylesheet" type="text/css" href="{% static 'css/reset.css' %}">
     <link rel="stylesheet" type="text/css" href="{% static 'css/main.css' %}">
     {# 网页顶部引入文件块 #}
     {% block topfiles %}{% endblock topfiles %}
    </head>
    <body>
    {# 网页顶部欢迎信息块 #}
    {% block header_con %}
     <div class="header_con">
      <div class="header">
       <div class="welcome fl">欢迎来到商城!</div>
       <div class="fr">
        <div class="login_btn fl">
         <a href="{% url 'user:login' %}">登录</a>
         <span>|</span>
         <a href="{% url 'user:register' %}">注册</a>
        </div>
        <div class="user_link fl">
         <span>|</span>
         <a href="{% url 'user:user' %}">用户中心</a>
         <span>|</span>
         <a href="cart.html">我的购物车</a>
         <span>|</span>
         <a href="{% url 'user:order' %}">我的订单</a>
        </div>
       </div>
      </div>  
     </div>
    {% endblock header_con %}
    
    {# 网页顶部搜索框块 #}
    {% block search_bar %}
     <div class="search_bar clearfix">
      <a href="index.html" class="logo fl"><img src="{% static 'images/logo.png' %}"></a>
      <div class="search_con fl">
       <input type="text" class="input_text fl" name="" placeholder="搜索商品">
       <input type="button" class="input_btn fr" name="" value="搜索">
      </div>
      <div class="guest_cart fr">
       <a href="#" class="cart_name fl">我的购物车</a>
       <div class="goods_count fl" >{{ cart_count }}</div>
      </div>
     </div>
    {% endblock search_bar %}
    
    {# 网站主体内容块 #}
    {% block body %}{% endblock body %}
    
     <div class="footer">
      <div class="foot_link">
       <a href="#">关于我们</a>
       <span>|</span>
       <a href="#">联系我们</a>
       <span>|</span>
       <a href="#">招聘人才</a>
       <span>|</span>
       <a href="#">友情链接</a>  
      </div>
      <p>CopyRight © 2016 北京商城信息技术有限公司 All Rights Reserved</p>
      <p>电话:010-****888 京ICP备*******8号</p>
     </div>
     {# 网页底部html元素块 #}
     {% block bottom %}{% endblock bottom %}
     {# 网页底部引入文件块 #}
     {% block bottomfiles %}{% endblock bottomfiles %}
    </body>
    </html>