Rails 5.2.4:如何减少RAM使用?

问题描述 投票:0回答:1

我的AWS信用额度即将到期,因此我想通过剥离不必要的功能和gem将我的应用程序的RAM使用减少到512mb。到目前为止,我剩下的宝石是:

gem 'rails', '~> 5.2.4'
gem 'sass-rails', '~> 5.0'
gem 'jbuilder', '~> 2.5'
gem 'rack-cors', require: 'rack/cors'
gem 'devise', github: 'plataformatec/devise'
gem 'turbolinks', '~> 5'
gem 'chart'
gem 'font-awesome-sass'
gem 'friendly_id'
gem 'geocoder'
gem 'pg'
gem 'pg_search'
gem 'simple_form'
gem 'puma'
gem 'jquery-rails'
gem 'bootstrap'
gem 'uglifier', '>= 1.3.0'
gem 'omniauth-facebook'
gem 'omniauth-google-oauth2'
gem 'pagy'
gem 'sucker_punch'

我从Rails 6+降为Rails 5.2.4passenger降为pumadelayed_jobs降为sucker_punchkaminari降为pagy。我尝试切换到bulma,但在移动设备上出现问题。

我仍然想进一步减少内存。

该应用程序有200张桌子。减少模型数量并在查询中使用.pluck有助于减少RAM使用吗?

是否需要uglifiersass-rails

删除mapbox和其他CSS等js依赖项还会减少RAM的使用吗?

ruby-on-rails ruby-on-rails-5
1个回答
0
投票

需要碎粉机和Sass-rails吗?

如果您在项目中不使用sass,则可以删除sass-rails。但我看到您有字体超赞的宝石。

Uglifier仅在编译资产时使用,因此您的css和js文件更小。

该应用程序有200张桌子。减少模型数量并在查询中使用.pluck有助于减少RAM使用吗?

Rails会自动加载您的代码,但是我怀疑模型的数量会对ram的使用产生重大影响。另一方面,当您从数据库中读取记录时,如果您有一个包含数百条记录的表,而您只是一次加载所有这些记录(User.all.to_aUser.all.each,则rails必须在内存上创建ActiveRecord对象。 )这将需要大量的内存,但仅在该特定时刻需要通常,pluck是使用较少ram的好方法,因为您仅获取所需值的数组,而在不需要它们时不完成AR对象。

将删除诸如mapbox和其他CSS之类的js依赖项也会减少RAM使用吗?

我不这么认为,在资产编译过程中会使用js依赖项。

如果使用多个线程,释放一些ram的一个好技巧是使用jemalloc而不是标准的malloc进行内存分配https://www.youtube.com/watch?v=4_yxbh9Enoc

您可以做的另一件事是只加载您实际使用的rails模块。在config / application.rb文件中,您会看到一行require 'rails/all'这样的行,其中加载了所有Rails功能https://github.com/rails/rails/blob/master/railties/lib/rails/all.rb

您可以更改该行以仅导入所需的功能,例如,如果您不使用action_cable或active_job,则可以仅导入其余功能。

[您可以做的另一件事是删除与第三方js和css有关的宝石,例如引导程序,超棒的字体,jquery,并使用yarn处理js和css的依赖项。但是,您可能会失去一些由这些宝石提供的视图帮助程序。

© www.soinside.com 2019 - 2024. All rights reserved.