【问题标题】:Does freezing enum values in Rails change anything?在 Rails 中冻结枚举值会改变什么吗?
【发布时间】:2017-09-26 09:20:31
【问题描述】:

值得在这样的 Rails 模型中冻结枚举值吗?

enum level: {beginner: 0, advanced: 1, expert: 2}.freeze
# or
enum level: [:beginner, :advanced, :expert].freeze

值不会在任何地方更改。如果我们冻结它们,性能会改变吗?

【问题讨论】:

    标签: ruby-on-rails rails-activerecord


    【解决方案1】:
    • 无论何时创建常量,您仍然可以在运行时更改它。
    • 通过使用 freeze,您可以创建一个实际上是 持续的。所以,当你尝试修改冻结的项目时,你会得到一个 运行时错误。
    • 加速 Ruby 应用程序的最佳方法之一是 减少创建的对象数量。每次执行 像 method("foobar") 这样的方法调用,您正在创建一个新的 String 对象。这将影响性能。
    • 如果我们冻结字符串文字,Ruby 解释器将只创建 一个字符串对象并将其缓存以备将来使用。因此使用冻结 明显提高性能

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    相关资源
    最近更新 更多