debug_toolbar告诉我在前端和django-admin中有12个信号的44个接收器。这是正常的吗?这会降低性能吗?我有什么要根据你检查/修理的吗?
我可能用pinax弄乱了一些东西,我注意到还有很多查询似乎重复了。 (检查并且查询似乎没问题)
这是工具栏的输出:
class_prepared class setup_join_cache, ensure_default_manager, do_pending_lookups, prep_localized_datetime
connection_created connection
got_request_exception request _rollback_on_exception
post_delete instance, using
post_init instance TagAutocompleteTagItField._update, TagAutocompleteTagItField._update, ImageField.update_dimension_fields, ImageField.update_dimension_fields, ImageField.update_dimension_fields, TagAutocompleteTagItField._update, TagAutocompleteTagItField._update, TagAutocompleteTagItField._update, ImageField.update_dimension_fields, ImageField.update_dimension_fields, ImageField.update_dimension_fields, TagAutocompleteTagItField._update, TagAutocompleteTagItField._update, TagAutocompleteTagItField._update, ImageField.update_dimension_fields, ImageField.update_dimension_fields
post_save instance, created, using, raw create_account, superuser_email_address, create_profile, signup_code_result_save, TagAutocompleteTagItField._save, TagAutocompleteTagItField._save, TagAutocompleteTagItField._save, TagAutocompleteTagItField._save, TagAutocompleteTagItField._save, TagAutocompleteTagItField._save, TagAutocompleteTagItField._save, TagAutocompleteTagItField._save
post_syncdb app, verbosity, interactive, class, created_models
pre_delete instance, using
pre_init instance, args, kwargs GenericForeignKey.instance_pre_init, GenericForeignKey.instance_pre_init, GenericForeignKey.instance_pre_init, GenericForeignKey.instance_pre_init, GenericForeignKey.instance_pre_init, GenericForeignKey.instance_pre_init, GenericForeignKey.instance_pre_init, GenericForeignKey.instance_pre_init, GenericForeignKey.instance_pre_init
pre_save instance, using, raw
request_finished close_connection
request_started reset_queries
TagAutocompleteTagItField是django-tagging的子类
答案 0 :(得分:1)
信号是同步的,因此它们将有助于调用它们的任何请求的处理时间。因此,性能是否受到影响取决于在这些功能中所做的工作。
在您的情况下,来自您的字段的模型实例化/保存似乎有很多。
那不是连接所有这些信号的默认django ImageField吗?看起来你的项目中每个字段都有一个信号连接。
在任何情况下,TagAutocompleteTagItField和ImageFields似乎都在添加大部分信号。没有这些字段的模型的开销将沿着检查模型中的每个字段以进行匹配的方式,如:
tag_fields = [field for field in c._meta.fields if type(field) == TagAutocompleteTagItField]
if tag_fields:
# Do stuff
那不应该那么糟糕。
如果你有一吨这些字段,可能需要通过禁用TagAutocompleteTagItField和ImageField信号来测试它。然后,如果它是一个排水管,请查看是否可以在其他地方移动信号中的某些逻辑,例如在访问它们时计算ImageField的尺寸。
但是......我不会。反正还没有。请记住,“过早优化是所有邪恶的根源”!