我是Rails的新手,这可能是一个愚蠢的问题,但我不知道如何影响Rails应用性能的宝石数量?它增加的宝石变得越慢吗?所有宝石都会在每个请求中被调用?如何影响Rails应用程序性能的宝石数量?
我在问这个问题,因为,例如,在Django中,你在调用它的每个.py文件中导入每个需要的类/方法/库。在Rails中,你没有这样做,所有东西都是“自动加载”的,但我想知道,这种“自动加载”的成本是多少?
这是否意味着每个请求都会调用所有gems get?
我是Rails的新手,这可能是一个愚蠢的问题,但我不知道如何影响Rails应用性能的宝石数量?它增加的宝石变得越慢吗?所有宝石都会在每个请求中被调用?如何影响Rails应用程序性能的宝石数量?
我在问这个问题,因为,例如,在Django中,你在调用它的每个.py文件中导入每个需要的类/方法/库。在Rails中,你没有这样做,所有东西都是“自动加载”的,但我想知道,这种“自动加载”的成本是多少?
这是否意味着每个请求都会调用所有gems get?
自动加载仅仅是一种将“将所有需要的类/方法/库导入”替换为“如果将文件放在特定位置,我们可以找到它们”的方法。
基本算法类似于“如果您使用类或模块并且找不到,在我们告诉您找不到它之前,请在这些路径之一中搜索它”。
自动加载正交于寻找宝石,而是寻找您的应用程序的代码。换句话说,在应用程序启动时,您的Gem文件会从您的Gemfile中加载并需要一次,但自动加载机制不是运行在gem上,而是运行在您应用程序的代码上。
所以要回答你的问题的第一部分:宝石加载与自动加载没有直接关系。在应用程序中包含新宝石可能会使应用程序启动速度稍慢,因为找到并分析了该库,但它们在启动后始终加载;它不会影响您的每个请求的性能。
这是很好的了解,RubyGems的是红宝石的一部分,而自动加载是的Rails的一部分:Rails的是写在Ruby之上的框架,以同样的方式Django是写在Python之上的框架,但Ruby和Rails非常独特。宝石是Ruby的一部分,自动加载是Rails的一部分。
自动加载旨在加快开发速度;如果您按照目录布局约定重新加载服务器,而不必每次请求都重新加载文件(并且只有应用中的文件)将。这很好,因为您可以在开发时让服务器保持运行。
值得注意的是,这是真的仅在开发模式。在生产模式下,它会查找文件是否只丢失一次,并在请求中记住它,以便为每个请求节省文件系统搜索的开销。事实上,如果您使用的是Rails 3.2或更高版本,即使在开发模式下,它也会变得足够聪明,只有在自上次请求以来发生更改的情况下才重新加载该文件,从而在开发过程中加快速度。
你不要有使用自动加载,顺便说一句:你可以手动require
你需要的文件,就像你谈论Python一样。这是Ruby的标准做法。这会绕过自动加载该文件,因为你的常量永远不会“未找到”:这样做会很好,因为它会提高应用程序的性能,但是很糟糕,因为每次更改代码时都必须重新启动应用程序。
tl; dr:不要担心自动加载性能。它将以应用程序性能为代价帮助您进入开发模式,并以开发速度为代价在生产模式下高效运行。
宝石将影响你的Rails应用程序的性能在以下几个方面的数字:
这两点都比较微妙,你不会注意到加载5个或10个宝石之间的区别。但一旦你达到像20或50宝石的数字,你会开始注意到...
感谢您的信息! – Timus83
感谢您的解释! – Timus83