Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.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 gem的数量如何影响Rails应用程序的性能?_Ruby On Rails_Ruby_Performance_Rubygems - Fatal编程技术网

Ruby on rails gem的数量如何影响Rails应用程序的性能?

Ruby on rails gem的数量如何影响Rails应用程序的性能?,ruby-on-rails,ruby,performance,rubygems,Ruby On Rails,Ruby,Performance,Rubygems,我是Rails新手,这可能是一个愚蠢的问题,但我想知道gem的数量对Rails应用程序性能有何影响?你添加的宝石越多,速度会变慢吗?是否所有宝石都会在每次请求时被调用 我问这个问题是因为,例如,在Django中,您在调用它的每个.py文件中导入了所有需要的类/方法/库。在Rails中,您没有这样做,所有内容都是“自动加载”,但我想知道,这种“自动加载”的成本是多少 这是否意味着每次请求都会调用所有gems?自动加载只是一种将“导入所有需要的类/方法/库”替换为“如果您将文件放在特定位置,我们可以

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

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


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

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

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

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

所以要回答问题的第一部分:gem加载与自动加载没有直接关系。在应用程序中添加新的gem可能会使应用程序在找到和解析库时启动慢一些,但它们会在启动后一直加载;它不会影响每个请求的性能

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

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

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

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

tl;dr:不要担心自动加载性能。它将以应用程序性能为代价帮助您进入开发模式,以开发速度为代价帮助您进入生产模式。

gem的数量将通过以下方式影响Rails应用程序的性能:

  • 启动应用程序/加载环境时,必须加载所有gem。这批货 如果有更多的宝石,显然需要更长的时间。在开发过程中,您会特别注意到这一点,因为您将(希望)加载环境很多次(例如每次运行单元测试)
  • 更多(加载的)代码也需要更多的空间,因此如果你使用更多的gems,你的应用程序将消耗更多的内存
这两点都相当微妙,你不会注意到装载5颗或10颗宝石之间的区别。但一旦你达到20或50颗宝石这样的数字,你就会开始注意到