1

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 的子类

4

1 回答 1

3

信号是同步的,因此它们会影响调用它们的任何请求的处理时间。因此,性能是否受到影响取决于这些功能中正在执行的操作。

在您的情况下,来自您的字段的模型实例化/保存似乎发生了很多事情。

这不是连接所有这些信号的默认 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 时计算它们的尺寸。

但是..我不会。反正还没有。请记住“过早的优化是万恶之源”!

于 2012-02-14T17:14:49.290 回答