gpt4 book ai didi

ruby-on-rails - 如何提高单页应用的性能?

转载 作者:行者123 更新时间:2023-12-04 21:21:55 25 4
gpt4 key购买 nike

简介
我有一个(大部分)单页application使用 BackboneJS 和 Rails 后端构建。

因为大部分交互发生在 webapp 的一个页面上,当用户第一次访问该页面时,我基本上必须在一个大型深度连接查询中从数据库中提取大量信息。

这导致我在这一页上的加载时间相当长。

load times

NewRelic 似乎在告诉我,我的大部分问题是由于 457 个单独的快速方法调用造成的。

fast methid calls

现在我已经完成了我能做的所有急切加载(我检查了 Bullet gem ),但我仍然有问题。

这些方法调用很可能发生在我的 Rabl 中。我用来序列化一堆 JSON 以嵌入到页面中以初始化 Backbone 的序列化程序。您不需要了解所有这些,只要说它可以添加多达 457 个方法调用就足够了。

object @search
attributes :id, :name, :subscription_limit

# NOTE: Include a list of the members of this search.
child :searchers => :searchers do
attributes :id, :name, :gravatar_icon
end

# Each search has many concepts (there could be over 100 of them).
child :concepts do |search|
attributes :id, :title, :search_id, :created_at

# The person who suggested each concept.
child :suggester => :suggester do
attributes :id, :name, :gravatar_icon
end

# Each concept has many suggestions (approx. 4 each).
node :suggestions do |concept|
# Here I'm scoping suggestions to only ones which meet certain conditions.
partial "suggestions/show", object: concept.active_suggestions
end

# Add a boolean flag to tell if the concept is a favourite or not.
node :favourite_id do |concept|
# Another method call which occurs for each concept.
concept.favourite_id_for(current_user)
end
end

# Each search has subscriptions to certain services (approx. 4).
child :service_subscriptions do
# This contains a few attributes and 2 fairly innocuous method calls.
extends "service_subscriptions/show"
end

所以看来我需要对此做点什么,但我不确定要采取什么方法。这是我有的潜在想法的列表:

性能改进思路

简化界面
也许我可以想出一些方法来向用户展示不需要实际数据的信息。我不明白为什么我绝对需要这样做,其他单页应用程序,例如 Trello有非常复杂的接口(interface)。

概念分页
如果我对概念进行分页,它将减少每次从数据库中提取的数据量。虽然会产生劣质的用户界面。

缓存
目前,刷新页面只是将整个搜索再次从数据库中提取出来。也许我可以缓存应用程序的某些部分以减少数据库命中。这看起来很困惑,因为我处理的数据不是很多是静态的。

多个请求
在不将 JSON 嵌入页面的情况下提供页面在技术上是不好的,但如果我加载未填充的页面然后获取数据,用户可能会觉得事情发生得更快。

索引
我应该确保我的所有外键都有索引。我还应该尝试考虑在哪些地方有索引(例如收藏夹?)并添加它们会有所帮助。

将方法调用移动到数据库中
也许我可以将我在 View 层中所做的一些迭代结果缓存到数据库中,然后将它们拉出来而不是计算它们。或者我可以在写入而不是读取时同步内容。

问题
有人对我应该把时间花在什么方面有任何建议吗?

最佳答案

如果无法看到实际的用户界面,这是一个很难回答的问题,但我会专注于仅加载显示初始界面所需的数据。例如,如果用户必须深入查看您正在呈现的一些数据,那么您可以按需加载该数据,而不是将其作为初始负载的一部分加载。您提到搜索可以有多达 100 个“概念”,也许您最初不需要获取所有这些概念?

最重要的是,听起来您的问题并不真正出在客户端 - 听起来您的服务器端代码正在减慢速度,所以我会探索您可以采取哪些措施来获取更少的数据,或者推迟复杂的查询,直到它们确实需要。

关于ruby-on-rails - 如何提高单页应用的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10460695/

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