如果我们缓存PARAMS到一个局部变量中的作用,这将有助于或其一样的吗?

StackOverflow https://stackoverflow.com/questions/1164472

因此,我们在运行一段时间称为臭气一次代码质量工具作为一部分我们项目。该工具主要查找代码味道,并生成报告。在这里,我们发现,我们得到“复制”闻每次我们尝试在params不止一次访问的密钥(好像我们正在一个方法调用相同参数两次或我们的复制,如果条件等)的时间。然而,params只是一个Hash,对不对?当钥匙被访问一次以上的其他哈希没有得到重复的味道。

这是为什么呢?什么是究竟params?是否有意义的一个局部变量缓存params然后使用它们?这将有助于或其一样的吗?或者是有什么不对的工具?救命啊!

有帮助吗?

解决方案

使用当前版本,最好只在您的应用程序/模型文件夹运行臭佬,因为它会引发误报对视图和控制器。

params为一种DTO(数据传输对象)接近系统边界的,所以其特性应比常规代码不同。但臭佬不知道,(还)。我计划,以改善臭佬在不久的将来,使其发挥使用Rails更好。不过现在,最好的办法是将其限制在寻找应用程序/模型(也许应用程序/佣工和LIB)。

其他提示

params为一个方法调用,做了@params ||= @request.params

这可能是它认为PARAMS是一个复杂的方法,所以要你尝试在一个变量缓存,但是,不要认为这是值得的,特别是因为它是memoized(基于我的rack_process.rb轨道2.2)

params[:foo]是一个方法调用,以Hash#[],所以臭气是正确的。我不熟悉的臭气,所以我不知道为什么其他哈希访问不被计数相同。 Hash#[]应该足够快,你不需要将其存储在一个局部变量,除非你在你的代码的性能非常关键的部分是。

params哈希表和常规散列之间的唯一区别是,它使用with_indifferent_access,这意味着可以用一个字符串或符号访问的任意键。

我相信每次调用PARAMS的时候,有一个初始化步骤产生的方法调用,我想你可以尝试创建一个PARAMS和检查调用次数。 这可能是盲目的猜测。 : - )

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top