Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 调用局部调用是一项昂贵的操作吗?_Ruby On Rails - Fatal编程技术网

Ruby on rails 调用局部调用是一项昂贵的操作吗?

Ruby on rails 调用局部调用是一项昂贵的操作吗?,ruby-on-rails,Ruby On Rails,我可以随心所欲地使用partials吗?还是我必须克制自己,以避免在流量过大的情况下让我的观点陷入困境?使用partials会带来明显的开销,但这可能不是您应该担心的问题 部分是文件。当您渲染一个没有部分的动作时,您的动作“花费”1个文件(这并不完全正确,但这是为了简化解释)。 如果您的操作呈现了4个部分,那么最终的成本为5。这意味着,您还有4个额外的IO调用,每个调用的实际成本取决于您的服务器负载、服务器性能等 但这成本重要吗?根据我的经验,同样值得注意的是,在99%的情况下,在代码可读性和可

我可以随心所欲地使用partials吗?还是我必须克制自己,以避免在流量过大的情况下让我的观点陷入困境?

使用partials会带来明显的开销,但这可能不是您应该担心的问题

部分是文件。当您渲染一个没有部分的动作时,您的动作“花费”1个文件(这并不完全正确,但这是为了简化解释)。 如果您的操作呈现了4个部分,那么最终的成本为5。这意味着,您还有4个额外的IO调用,每个调用的实际成本取决于您的服务器负载、服务器性能等

但这成本重要吗?根据我的经验,同样值得注意的是,在99%的情况下,在代码可读性和可维护性方面使用partials的好处通常是值得选择的

如果性能必须是一个关键特性,您可能应该在其他地方寻找速度和改进

请记住:Ruby不是一种超快速的编程语言,代码的表达能力总是优先于性能。Rails隐式地同意这一约定,尽管Rails团队一直关注性能(Rails 3是一个实践演示,它总是有改进的地方)

也就是说,您可以通过一些巧妙的缓存机制安全地使用partials并减少应用程序开销。例如,您可以将集合渲染放置在
缓存
块中,以便渲染集合语句只执行一次,然后您的应用程序将只加载1个缓存文件,而不是10个未缓存的部分

一开始我犯过很多次的最隐秘的错误之一就是担心性能以错误的方式出现,也就是说,没有实际运行基准测试。我记得有一次,我试图放弃一个数据库查询,转而使用硬编码哈希,因为“查询成本”没有意识到还有另一个愚蠢的查询加载整个表集合而没有包含语句,这导致第二个查询的运行速度慢了3倍


因此,如果您真的关心性能,您可能不应该避免使用partials,而是应该确保利用Rails提供的所有其他功能来扩展应用程序。

显然有一些开销,但我所看到的一切都支持使用partials进行抽象。我期待着知道自己在做什么的人回答这个问题+这是一个很好的问题。一般来说,我会说“想用多少就用多少”。但这实际上取决于渲染特定的部分所需的时间。如果跟踪开发日志(
tail-f log/development.log
)并加载一个页面,您将看到渲染每个部分所需的时间。如果一个或多个渲染速度较慢,请找到加快渲染速度或缓存渲染速度的方法。否则,不用担心。