django存储光交业务管理系统-菜鸟开发日记第九节-系统开发遇
2018-04-13 本文已影响32人
python菜鸟
性能篇:
针对模版内的模版语言,如果涉及的表太多,会导致特别慢,我刚开发打开一个存储的详细页面几乎用啦40秒,都是不可忍受的时间。
最开是是网页一次性全部展示,由于表之间关联性太强,导致打开一个网页结果运行啦几千条sql语句。果然是慢到极点。
模版语言使用太过,形成3表或者4表的查询结构。比如:
{% for i in data%}
<tr>
<td>{{ i.index }}</td>
<td>{{ i.slot }}</td>
<td>{{ i.port }}</td>
<td class="am-hide-sm-only">{{ i.speed }}</td>
<td class="am-hide-sm-only">{{ i.type }}</td>
<td class="am-hide-sm-only">
{% if i.wwn_set.all|length > 0 %}
{% for k in i.wwn_set.all %}
{{ k.wwn }}
{% endfor %}
{% endif %}
</td>
<td class="am-hide-sm-only">{{ i.crc_err }}</td>
<td class="am-hide-sm-only">{{ i.tx }}</td>
<td class="am-hide-sm-only">{{ i.rx }}</td>
<td class="am-hide-sm-only">{{ i.TX_Power }}</td>
<td class="am-hide-sm-only">{{ i.RX_Power }}</td>
<td class="am-hide-sm-only">
{% if i.wwn_set.all|length > 0 %}
{% for k in i.wwn_set.all %}
<a >{{ k.host_wwn }}</a>
{% endfor %}
{% endif %}
</td>
<td class="am-hide-sm-only">
{% if i.wwn_set.all|length > 0 %}
{% for k in i.wwn_set.all %}
<a data-am-popover="{content: '{{ k.wwnname }}{{ k.hostgroup_wwn }}', trigger: 'hover focus'}">{{ k.storage_wwn }}</a>
{% endfor %}
{% endif %}
</td>
</tr>
{% 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) + "<br> "
if k.Sanport_wwn:
sanwwn += str(k.Sanport_wwn.san) + " " + str(k.Sanport_wwn.slot) + "-" + str(k.Sanport_wwn.port) + "<br> "
if k.Sanport_wwn:
rx += str(k.Sanport_wwn.rx) + "<br> "
tx += str(k.Sanport_wwn.tx) + "<br> "
if k.host_wwn:
host += str(k.host_wwn) + "<br> "
hostapp += str(k.host_wwn.app) + "<br> "
html += "<tr>" + \
"<td>" + str(i.id) +"</td>"+ \
"<td>" + str(i.hostname) +"</td>" + \
"<td>" + str(i.Notes) +"</td>" + \
"<td>" + wwn +"</td>" + \
"<td>" + sanwwn +"</td>" + \
"<td>" + rx +"</td>" + \
"<td>" + tx +"</td>" + \
"<td>" + host +"</td>" + \
"<td>" + hostapp +"</td>" + \
"</tr>"
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存储光交业务管理系统第二节-pyhon脚本的编写
django存储光交业务管理系统-菜鸟开发日记第八节-目录的结构说明
django存储光交业务管理系统-菜鸟开发日记第九节-系统开发遇到的坑
django存储光交业务管理系统-菜鸟开发日记第10节-业务图表需求
………………………………………………………………