gpt4 book ai didi

ruby-on-rails - Gem 的数量如何影响 Rails 应用程序的性能?

转载 作者:数据小太阳 更新时间:2023-10-29 07:22:37 24 4
gpt4 key购买 nike

我是 Rails 的新手,这可能是个愚蠢的问题,但我想知道 gem 的数量对 Rails 应用程序性能有何影响?添加的 gem 越多速度越慢吗?是否所有 gem 都会在每次请求时被调用?

我问这个问题是因为,例如,在 Django 中,您在调用它的每个 .py 文件中导入每个需要的类/方法/库。在 Rails 中你不会这样做,一切都是“自动加载”的,但我想知道,这种“自动加载”的成本是多少?

这是否意味着在每次请求时都会调用所有 gem?

最佳答案

自动加载只是一种将“导入每个需要的类/方法/库”替换为“如果您将文件放在特定位置,我们可以找到它们”的方法。

基本算法类似于“如果您使用一个类或模块但未找到它,在我们告诉您我们找不到它之前,请在这些路径之一中搜索它。”

自动加载与寻找 gem 是正交的,而是与寻找您的应用程序的代码有关。换句话说,您的 gem 会在应用程序启动时从您的 Gemfile 加载和需要一次,但自动加载机制不是在 gems 上运行,而是在您的应用程序代码上运行。

所以回答你问题的第一部分:gem 加载与自动加载没有直接关系。在您的应用程序中包含新的 gem 可能会使应用程序启动速度变慢,因为会找到并解析库,但它们会在启动后一直加载;它不会影响您的每个请求性能。

很高兴知道 RubyGems 是 Ruby 的一部分,而自动加载是 Rails 的一部分:Rails 是在 Ruby 之上编写的框架,同样Django 是在 Python 之上编写的框架,但 Ruby 和 Rails 截然不同。 Gem 是 Ruby 的一部分,自动加载是 Rails 的一部分。

自动加载旨在加快开发速度;如果您遵循目录布局约定,您的文件(并且只有您应用中的文件)将在每次请求时重新加载,而不是每次进行更改时都必须重新启动服务器。这很好,因为您可以在开发过程中让服务器保持运行。

值得注意的是,仅在开发模式下是这样。在生产模式下,如果文件只丢失一次,它会找到文件并在请求中记住它,以节省您在每次请求时搜索文件系统的开销。事实上,如果您使用的是 Rails 3.2 或更高版本,即使在开发模式下它也变得足够智能,仅在文件自上次请求后发生更改时才重新加载文件,从而使开发过程中的事情变得更快。

必须使用自动加载,顺便说一句:您可以手动要求您需要的文件,就像您谈到 Python 一样。这是标准的 Ruby 做事方式。这将完全避免自动加载该文件,因为您的常量永远不会“找不到”:这是好的,因为它会提高您的应用程序的性能,但不好的是,每次更改代码时都必须重新启动您的应用程序。

tl;dr:不用担心自动加载性能。它将以牺牲应用程序性能为代价在开发模式下帮助您,并以牺牲开发速度为代价在生产模式下提高性能。

关于ruby-on-rails - Gem 的数量如何影响 Rails 应用程序的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12979171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com