我们都知道页面静态化可以减少对数据库的访问,降低服务器的压力。但是我们在使用Django框架编写代码的时候,往往会有这样的疑问,那就是使用定时任务定时生成静态化页面(每隔2分钟或其他科学时间);还是使用Django的第三方扩展Xadmin,在运营人员修改数据的时候触发生成静态页面。即,什么时候用定时生成?什么时候用触发生成。咋一看,会有这样的疑问,既然能够触发生成静态化页面,干嘛还要用定时任务生成呢?当然这是我的疑问。
首先,我们使用页面静态化是有一个前提的,那就是页面访问量很大,这种情况下,才有页面静态化的必要。
下面我说一下自己的想法,不对的地方烦请你们指正。
很多时候我们存在数据库的数据,只有运营人员或开发人员可以进行修改,这种情况下,使用触发生成的方式。
使用Xadmin运营管理后台功能,在代码中(admin.py)对save_model()、delete_model()等方法进行重写,用户保存数据或删除数据的时候触发生成静态化页面的方法。
class SKUAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
"""
站点管理类的钩子功能,在添加数据或者编辑数据会自动执行当前方法
:param request: 本次admin站点中客户端操作的请求对象
:param obj: 本次操作的模型对象
:param form: 本次操作的表单系统对象
:param change: 本次操作的数据[编辑操作时提交的数据]
:return:
"""
obj.save()
# 详情页的静态化页面由运营人员编辑商品信息时触发生成,静态化页面
generate_static_sku_detail_html.delay(obj.id)
那么,什么时候需要使用定时任务定时生成静态化页面呢。笔者认为,当第三方可以对我们数据库的数据进行修改的时候,我们需要考虑定时生成静态化页面。因为这种情况下,第三方直接修改的是我们数据库的内容,并没有经过Xadmin运营管理后台,也就无所谓触发生成静态化页面。
举个栗子,同样是商品详情页的商品,淘宝和京东的做法可能不同,当然,这只是我的猜测。
- 淘宝做的是平台,第三方商家可以对自己售卖的商品修改价格,更改数据库数据,这个时候直接修改的是数据库的数据,不能通过Xadmin扩展来触发生成静态化页面,在不得不做静态化页面的前提下,就需要使用定时任务定时生静态化页面。当然,定时任务定的时间要根据实际情况而定,例如,双11的时候,时间要定得短一点。另外,可以使用时间戳,在一个标准的时刻,生成静态化页面。
- 京东自营店,假设只有运营人员能够对数据进行修改,并没有第三方商家对数据库数据进行修改,这种情况下,仅仅使用Xadmin对数据修改时做触发生成静态化页面的处理就可以了。
个人博客:
https://blog.csdn.net/niubiqigai/article/details/82844512