最近很多朋友都在讨论系统性能相关的问题,大部分问题都是围绕着应用层面的缓存,而本文则希望从另一个角度探讨提升系统性能的问题,希望能够起到抛砖引玉的作用。
最近做的一个网站项目,开发语言使用的是python,框架是django,django的开发效率毋庸置疑,在效率上可谓非常之快,然而框架的易用性也增加了框架内部实现的复杂性,必然导致性能的下降。一开始我们对框架的ORM部分进行了重写,在一定程度上减少了ORM的复杂度,提升了部分性能。然而这还远远不够,由于网站的需求变更,需要为几个其他公司的产品提供数据服务,而在未来可能会有更多的厂商接入网站,旧有的使用django模板生成html的方式并不能够很好的满足此需求,因此我们决定使用XSLT+XML将展现与数据分离,如此一来,我们即可满足对外提供数据的需求。
由于应用本身逻辑的关系,我们的数据以及展现样式都不会经常变更,实时性不强,因此静态化则是我们最佳的选择,由于目前主流的浏览器都支持XSLT,为了尽量减少服务端的压力,我们同时也决定将页面的渲染交由客户端来实现,而服务端仅仅生成XML和XSLT的静态文件,而不做XSLT渲染。
以上则是整个应用在表现层做的主要的修改,Django模板渲染的性能到底有多差呢?在实现了XSLT方式后,我做了一个简单的测试,其实我们在第一次生成XSL文件的时候,是通过使用django自身提供的模板进行生成的,只是我们在前端nginx服务器做了一个拦截,当发现xsl存在时,则直接获取,否则就跑fastcgi通过django模板生成xsl,这个测试很简单,测试django模板渲染的时候,我就把生成静态缓存的代码注释掉,保证每次访问时nginx都无法获得静态资源即可每次请求都会跑到django进行渲染。考虑到本次测试只是为了测试django渲染模板的性能,因此另一个测试也必须每个请求都要通过django,只是不进行模板的渲染,因此两个测试的流程如下:
1、模板渲染测试
每次请求xsl文件,都通过django,并进行模板渲染
2、不使用模板渲染
每次请求xsl文件,都通过django,但不进行渲染,渲染结果直接从缓存获得
注:以上两个测试都是跑动态请求,不是静态页面请求。
经过测试后,发现性能的差别远远大于我的预计,渲染的性能,在同等条件下,每秒为110TPS(对于TPS的解释,请看我的另一篇文章
《性能测试中带宽的影响》),而通过缓存获取xsl的性能则是190TPS左右,性能的差距非常大,相差了差不多一倍,如此巨大的差距倒是出乎我意料之外,不过本次测试只是针对于django自带的模板引擎进行的测试,并不代表其他模板引擎的性能也是如此,等有时间的时候,我再对其他的模板引擎进行相同的测试,相信应该不会差别如此大,毕竟django模板性能差是众所周知的。
可惜的是,本次测试只是对django的模板渲染进行了测试,并没有对xslt渲染进行测试,时间关系,再加上自己比较懒,还是等下次再对xslt渲染进行一次测试,不过有一点是可以肯定,客户端渲染xslt绝对会降低服务端的压力,毋庸置疑,有兴趣的朋友可以自己测试一下,再把结果告诉我,这样我也不用自己去测试了,呵呵。
分享到:
相关推荐
在Python的Web开发领域,Django是一个非常流行的...在`zqxt_tmpl`这个压缩包中,很可能包含了`zqxt`应用的模板文件,供我们进一步学习和参考。通过研究这些模板,我们可以更好地理解Django模板的实际应用和工作原理。
【Django_layui后台模板】是一个专门为Django框架设计的、基于Layui前端框架的后台管理模板。Django是Python开发的一款高级Web框架,它强调代码的可读性和简洁性,而Layui则是一款轻量级的前端UI框架,提供了丰富的...
【标题】:“django博客项目前端模板.rar”是一个与Python的Django框架相关的压缩包,它包含了一套完整的Django博客项目的前端模板。这个模板设计旨在为开发者提供一个基础的、可自定义的用户界面,用于展示博客内容...
如果你计划使用这套模板并结合Django来构建你的博客,你需要对Django的基本概念、MVT(模型-视图-模板)架构、URL路由、数据库操作等方面有一定的了解。 追梦任务的博客(https://www.zmrenwu.com/post/2/)被提及...
Django入门基础教程:django模板 Django入门基础教程:django模板
在IT行业中,构建Web应用程序时,开发者经常会选择合适的框架来提高效率和代码质量...在实践中,开发者应熟练掌握Django的模型、视图和URL配置,以及Flask的路由、模板和请求处理,这样才能更好地理解和运用这个项目。
**Django电子邮件模板详解** Django作为Python的一个强大的Web框架,不仅在网页开发上表现出色,也提供了方便的电子邮件处理功能。"django-email-from-template"是Django的一个扩展,允许开发者使用Django模板系统...
总结来说,`django-inline-svg`是Django开发中的一个实用工具,简化了SVG在模板中的使用,提高了开发效率和网页性能。通过学习和掌握这个库,开发者可以在项目中更好地利用SVG的优势,创建更加美观且高效的Web应用。
打算做网站左边栏的二级链接,通过从数据库外联键(ForeignKey)获取子节点,再使用Django模板{% for <个体> in <父节点>.<个体所在表名>_set.all %}产生第二季链接。 但该模板还存在渲染错误,会出现子节点渲染后的父...
项目标题:高效 Django 模板引擎开发源码集合 技术栈:主要采用 Python 语言进行开发。 包含文件类型:共计 36 个文件,其中包括: - Python 源代码文件(.py):31 个 - 文本文件(.txt):2 个 - Git 忽略配置(....
《基于Django模板实现的协同过滤图书推荐系统》是一款通过 Django 模板引擎和 HTML 前端技术实现的图书推荐系统。该系统采用协同过滤算法,根据用户的历史行为和评分数据推荐个性化的图书内容。前端使用 HTML 配合 ...
在压缩包的子文件`1-hello,blog`中,很可能包含了简单的示例应用,如“Hello, Blog”项目,演示如何在GAE上设置和使用Django模板。这个项目可能包括了`app.yaml`配置文件、`main.py`(或`appengine_config.py`)应用...
Django:Django模板系统与HTML渲染.docx
django-classy-tags, 基于类的Django 模板标记 django-classy-tags请参考文档/目录中的文档以获得帮助。 有关HTML呈现版本的信息,请参见这里的 。 这里项目这个项目的目标是创建一种新的编写 Django 模板标签的方法...
10. **模板性能优化** - 使用`{% cache %}`标签缓存模板部分,减少服务器计算压力。 - 合理利用模板继承和包含,避免重复代码。 通过深入学习Django模板,开发者可以构建出高效且易于维护的Web应用界面,同时提高...
模板语言django96官方帮助文档
【Python一日一练---Django模版练习源码】是一个针对初学者和进阶者设计的实战项目,旨在帮助开发者熟悉并掌握Django框架中的模板系统。Django是一个基于Python的高级Web开发框架,它提供了丰富的功能来简化网页应用...