django存储光交业务管理系统-菜鸟开发日记第九节-系统开发遇到的坑

性能篇:
针对模版内的模版语言,如果涉及的表太多,会导致特别慢,我刚开发打开一个存储的详细页面几乎用啦40秒,都是不可忍受的时间。



最开是是网页一次性全部展示,由于表之间关联性太强,导致打开一个网页结果运行啦几千条sql语句。果然是慢到极点。
模版语言使用太过,形成3表或者4表的查询结构。比如:

 {% for i in data%}
                        
                            {{ i.index }}
                            {{ i.slot }}
                            {{ i.port }}
                            {{ i.speed }}
                            {{ i.type }}
                            
                                {% if  i.wwn_set.all|length > 0 %}
                                    {% for k in  i.wwn_set.all  %}
                                        {{ k.wwn }}
                                    {% endfor %}
                                {% endif %}
                            
                            {{ i.crc_err }}
                            {{ i.tx }}
                            {{ i.rx }}
                            {{ i.TX_Power }}
                            {{ i.RX_Power }}
                            
                                {% if  i.wwn_set.all|length > 0 %}
                                    {% for k in  i.wwn_set.all  %}
                                        {{ k.host_wwn }}
                                    {% endfor %}
                                {% endif %}
                            
                            
                                {% if  i.wwn_set.all|length > 0 %}
                                    {% for k in  i.wwn_set.all  %}
                                        {{ k.storage_wwn }}
                                    {% endfor %}
                                {% endif %}
                            
                        
                    {% endfor %}

通过这种方式的话基本上是作死,因该善用values:通过这个进行多表查询,效率比以上的强太多啦。

    st_log = models.Doment.objects.values("id","dotime","storage__ST_sn","storage__ST_ip","storage__ST_prodname","storage__ST_prodect").filter(
        Q(storage__ST_prodname="富士通") | Q(storage__ST_prodname="日立") | Q(storage__ST_prodname="华为") | Q(
            storage__ST_prodname="EMC"))

通过以上方案,速度基本达到啦5秒以内打开网站,但还是太慢。
再次采用异步的方式进行体现。
将所以的菜单进行异步获取,在views.py里面直接将html传回去。

def stroage_mess_host_rili_ajax(request):
    ret = {"status": True, "error": None, "data": None}
    if request.method == "POST":
        id = request.POST["id"]
        obj = models.STHOST.objects.filter(storage_id=id)
        html =""
        for i in obj:
            hostgoupname = ""
            for k in i.sthostgroup_set.all():
                hostgoupname += str(k.hostgroupname)
            wwn = ""
            sanwwn = ""
            rx = ""
            tx =""
            host = ""
            hostapp = ""
            for k in i.wwn_set.all():
                wwn += str(k.wwn) + "
" if k.Sanport_wwn: sanwwn += str(k.Sanport_wwn.san) + " " + str(k.Sanport_wwn.slot) + "-" + str(k.Sanport_wwn.port) + "
" if k.Sanport_wwn: rx += str(k.Sanport_wwn.rx) + "
" tx += str(k.Sanport_wwn.tx) + "
" if k.host_wwn: host += str(k.host_wwn) + "
" hostapp += str(k.host_wwn.app) + "
" html += "" + \ "" + str(i.id) +""+ \ "" + str(i.hostname) +"" + \ "" + str(i.Notes) +"" + \ "" + wwn +"" + \ "" + sanwwn +"" + \ "" + rx +"" + \ "" + tx +"" + \ "" + host +"" + \ "" + hostapp +"" + \ "" ret = {"status": True, "error": None, "data": html}

html内文件。

  $("#stroage_mess_work").click(function () {
            var id = $("#storage_id").text()
            $("#storage_work").empty()
            $('#waitting').modal({backdrop: 'static', keyboard: false},'toggle')
            $.ajax({
                url: "{% url "storage_work_ajax" %}",
                type: 'POST',
                data:{"id":id},
                success: function(data){
                    var obj = JSON.parse(data);
                    if(obj.status){
                        $("#storage_work").append(obj.data)
                        console.log(obj.data)
                        $('#waitting').modal('hide')
                    }else{
                        alert("error")
                        $('#waitting').modal('hide')
                    };
                }
            });
        });

最终通过以上方案,网页基本上是秒开,几乎不用等待,异步的话慢点,但也能5秒内打开。
明天继续



目录

django开发之存储光交业务管理系统第一节-序言

django存储光交业务管理系统第二节-pyhon脚本的编写

django存储光交业务管理系统第三节-系统初步分析需求

django存储光交业务管理系统第四节-光交数据库的设计

django存储光交业务管理系统第五节-存储数据库的设计

django存储光交业务管理系统第六节-系统的架构流程图

django存储光交业务管理系统第七节-程序的启动

django存储光交业务管理系统-菜鸟开发日记第八节-目录的结构说明

django存储光交业务管理系统-菜鸟开发日记第九节-系统开发遇到的坑

django存储光交业务管理系统-菜鸟开发日记第10节-业务图表需求

………………………………………………………………

你可能感兴趣的:(django存储光交业务管理系统-菜鸟开发日记第九节-系统开发遇到的坑)