当前位置:  开发笔记 > 后端 > 正文

如何加速轨道5上的视图渲染?

如何解决《如何加速轨道5上的视图渲染?》经验,为你挑选了1个好方法。

我有一个Rails 5应用程序,其中包含一个名为Sensor Registry的模型.

它目前有大约160,000条记录,但我在尝试显示这些数据时遇到极低的加载时间.

该应用程序运行在双核Intel(R)Xeon(R)CPU E5-2670 v3 @ 2.30GHz和2GB RAM上.

服务器日志显示以下内容:

在2017-01-10 23:43:41 +0000开始获取187.220.30.180的GET"/ sensor_registries"

无法从187.220.30.180渲染控制台!允许的网络:127.0.0.1,:: 1,127.0.0.0/127.255.255.255

ActiveRecord :: SchemaMigration Load(1.2ms)SELECT"schema_migrations".*FROM"schema_migrations"

由SensorRegistriesController #index处理为布局/应用程序中的HTML渲染sensor_registries/index.html.erb

SensorRegistry Load(604.0ms)SELECT"sensor_registries".*FROM"sensor_registries"

传感器负载(0.6ms)SELECT"传感器".*FROM"传感器"WHERE"传感器"."id"IN(49,50,51,52,53,54,55,56,57,58,59,60, 65,61,63,64,62)

在布局/应用程序中呈现sensor_registries/index.html.erb(54663.9ms)在55468ms内完成200 OK(浏览次数:54827.7ms | ActiveRecord:611.5ms)

我摆脱了N + 1问题,但我想知道是否还有更多关于数据库查询的事情.

无论如何,问题似乎是在渲染页面时,处理它需要大约54秒.

有没有办法优化CPU使用率?

什么是加速流程并以足够快的速度向用户显示数据的最佳解决方案?



1> Glyoko..:

这当然看起来不像是硬件问题,而是实现的问题.如果不了解更多有关您的数据结构和架构的信息,这是不可能完美回答的,但有一些想法可以帮助您追踪问题:

1)渲染页面有多大?是否有可能数据的庞大大小导致渲染时间变慢?如果这是问题并且渲染页面太大,请考虑对结果进行分页.

2)ruby进程在任何时候使用多少内存?当你说,它"有大约160,000条记录"时,我假设你在谈论sensor_registries表,并且我假设随后的传感器查询sensors.id in (...)是用来自sensor_registries表的一些数据构建的.如果在完成任何进一步的工作之前将整个表加载到内存中,那么ruby进程是否可能只是内存不足?

3)另外,整个桌子是否真的需要一次装满?您可能需要查看http://apidock.com/rails/ActiveRecord/Batches/find_in_batches.这种方法非常适合分解需要在大型表上完成的工作.

4)更好 - 而且实际上没有更好的方法来重新考虑您的架构.将内存中的整个表作为同步请求(即使是小型请求)的一部分加载几乎总是禁止的.你能想出一个SQL查询来获取所有你需要的记录而不加载整个表吗?

5)如果你绝对需要整个表,那么在一次加载后缓存结果呢?如果您希望查询结果在具有相同参数的请求之间相同,您是否可以使用params构造缓存键,并使用它来存储结果?至少这样,第一个之后的所有请求都将是快速的(呃).

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有