Tag: 性能

如何在Rails 3应用程序中配置请求

如何在Rails 3应用程序中配置请求? 这个答案似乎只适用于2. *。 我应该如何在Rails 3中执行此操作?

rake资产:预编译是slooooow。 有什么方法可以加快速度吗?

我有一个在Heroku上运行的Rails 3.2应用程序,它使用CKEditor。 现在,CKEditor是一个非常大的文件和文件夹集合,可能是预编译资产所需时间的最大贡献者。 对资源进行定期推送需要花费一分多钟的资产:预编译步骤。 所以我现在在本地进行预编译,并且只有在我进行编辑之前,才推送到Heroku,以缩短部署时间。 然而,我糟糕的旧Windows笔记本电脑很容易打破15分钟的rake资产:预编译。 这使得对js或css文件进行少量编辑或添加会非常痛苦。 我根据Heroku文档的要求确实有config.assets.initialize_on_precompile = false。 但我很确定实时生猪是压缩,即Uglifier。 有没有人建议我如何解决这个问题? 我只是做错了吗? 有没有办法只编译更改的文件? 可以/我应该将CKEditor直接移动到公共目录以避免预编译吗?

即使在急切加载之后,belongs_to关联也会单独加载

我有以下协会 class Picture < ActiveRecord::Base belongs_to :user end class User < ActiveRecord::Base has_many :pictures end 在我的PicturesController中,我渴望加载用户 class PicturesController < ApplicationController def index @pictures = Picture.includes(:user).all end end 在我看来,我正在显示每个图片的用户名 -@pictures.each do |picture| %tr %td= picture.name %td= picture.user.name 现在的问题是,即使我急于加载用户,我也会看到在视图中显示用户名时触发了各个查询。 我有大约1000张图片记录,我为此请求触发了1000多个查询。 我究竟做错了什么? 如何避免用户的个别查询?

Apache基准测试multipart / form-data

我正面临一个apache基准post文件的奇怪问题。 我需要强调一个处理文件上传的function。 所以,我搜索了一下,发现了一篇描述如何正确构建post文件的post。 其内容如下: –1234567 Content-Disposition: form-data; name=”user_id” 3 –1234567 Content-Disposition: form-data; name=”file”; filename=”cf_login.png” Content-Type: image/png [base64 encoded file content] –1234567– ab线是这样的: $ ab -c 1 -n 5 -v 4 -T ‘multipart/form-data; boundary=1234567’ -p post_file.txt http://localhost:3000/files 当ab发出请求时,生成的标头如下: INFO: POST header == — POST /files.json/ HTTP/1.0 Content-length: 229 Content-type: multipart/form-data; boundary=simpleboundary Host: localhost:3000 User-Agent: ApacheBench/2.3 Accept: […]

Rails – 请求的完成时间明显高于View和DB时间

我有一个控制器,它从一个相当复杂的关系查询返回JSON或XML,也有一些控制器逻辑。 我通过改进我的查询并确保我的索引对我的查询是正确的来调整数据库方面。 在我的日志中,我看到这样的项目: Completed in 740ms (View: 1, DB: 50) 因此,如果我理解正确,这意味着视图需要1秒钟才能渲染,数据库查询为50毫秒。 是控制器中的所有剩余时间吗? 我试过绕过我的控制器逻辑,只是把我的to_json和to_xml留在那里,它也一样慢。 作为参考点,我的平均返回JSON结果集是168k。 是否有其他步骤及时进入已完成状态? 它是否包括网络传输的最后一个字节之前的时间? 更新:我在基准测试块中包含了控制器的各个部分: self.class.benchmark(“Active Record Find”) do #my query here end 我发现即使日志行显示DB:50,我的活动记录查找几乎占用了剩余的所有时间。 所以现在我很困惑这个DB号码意味着什么,为什么基准线会说~~ 600ms,但DB:时间将是~50。 谢谢

Heroku上的奇怪的TTFB(第一个字节的时间)问题

我们正在改进我们在Heroku托管的rails应用程序的性能(rails 3.2.8和ruby 1.9.3)。 在此过程中,我们遇到了一个令人担忧的问题,其源头似乎非常难以追踪。 让我快速解释一下我们如何体验这个问题以及我们如何尝试隔离它。 – 从6月左右开始,我们在整个网站的Time to First Byte中经历了奇怪的滞后行为。 使用该网站时问题很明显(有时候应用程序没有响应10-20秒),并且它也通过webpagetest.org出现在瀑布分析中。 我们的总部设在丹麦,但是从任何主机那里得到这个结果。 为了确认问题,我们进行了基准测试,我们向一个简单的页面发送了300个相同的请求并测量了响应时间。 如果我们向首页发送300个请求,则中位响应时间低于1秒,这是相当不错的。 令我们感到害怕的是,60个请求占用的时间增加了一倍,而其中40个请求占用的时间超过4秒。 有些请求需要16秒。 这些慢速请求都没有出现在我们用于性能监控的New Relic中。 无论我们如何扩展我们的Web流程,都不会显示请求排队,结果也是一样的。 尽管如此,我们还是拒绝承认问题是由应用程序代码引起的,所以我们尝试了另一个实验,我们通过机架中间件响应请求。 通过将此中间件(TestMiddleware)放置在机架堆栈的开头,我们在它甚至命中应用程序之前返回了一个请求,确保以下任何中间件或rails应用程序都不会导致延迟。 Middleware setup: $ heroku run rake middleware use Rack::Cache use ActionDispatch::Static use TestMiddleware use Rack::Rewrite use Rack::Lock use Rack::Runtime use Rack::MethodOverride use ActionDispatch::RequestId use Rails::Rack::Logger use ActionDispatch::ShowExceptions use ActionDispatch::DebugExceptions use ActionDispatch::RemoteIp use Rack::Sendfile use […]

Web前端缓存网站的最佳实践?

摘要 当我正在查看stackoverflow和网络时,我发现通常缺乏关于缓存使用会话的高性能站点的最佳实践的良好文档。 如果我们可以围绕一些基本构建块分享一些想法,特别是在缓存方面,那将会很有帮助。 出于本讨论的目的,我正在避免使用memcache,并专注于完全生成的静态和页面的缓存。 因此,要设置场景,想象一下Web服务器(比如nginx),反向代理(比如清漆),app server(无论如何),db server(比如mysql)。 匿名 静态项目(gif / jpg等) 半动态(js / css) 动态 登录 静态的 半动态(js / css) 动态 一般来说,所有的Anon都应该是可缓存的,并且大部分都是登录的(忽略动态,现在没有ESI)。 Anon#1 设置远期过期 如果可能,设置ETag Cache-Control:max-age = 315360000 Anon#2 (如果动态生成其他Anon#1规则,则反向代理缓存结果) Cache-Control:public,s-maxage = 3000 Anon#3 Cache-Control:public,s-maxage = 300 登录#1 设置远期过期 如果可能,设置ETag Cache-Control:max-age = 315360000 登录#2 (如果动态生成其他登录的#1规则,则使用反向代理缓存结果) Cache-Control:public,s-maxage = 3000 登录#3 Cache-Control:s-maxage = 0,必须重新validation 你有什么建议? 我会在答案进来时更新post。

什么是生成网页的合理时间?

我正在开发Web应用程序(基于Rails 3)。 我真的不喜欢生成页面所需的时间 – 取决于显示的数据,它需要2.5到甚至4秒。 所以我只是想知道在您的应用中生成页面的平均合理时间是多少。 说你检查生成时间,例如它是750毫秒并且想“好吧,即使没有缓存也应该没问题”。 或者当你看到1.5秒时,你会想到“噢,我的上帝,用户不会等待这么长时间离开网站”

Rspec,Cucumber:最佳速度数据库清洁策略

我想提高测试的速度。 我应该使用use_transactional_fixtures还是使用database_cleaner gem? 哪种database_cleaner策略最好? 我注意到从迁移后:truncation到:transaction我的800多个例子运行速度快了4倍! 当我使用database_cleaner :transaction时,我应该关闭use_transactional_fixtures吗? Rack_test的最佳策略是:transaction吗? 在使用selenium或akephalos时,从:transaction到:truncation的最佳实践是什么? PS Mysql,Rails 3,Rspec2,Cucumber PPS我知道spork和parallel_test并使用它们。 但他们是偏离主义的。 例如,Spork在整个套件运行中节省大约15-20秒,但从:transaction更改为:truncation显着地将运行时间从3.5增加到13.5分钟(差异10分钟)。

压力测试rails web应用程序的最佳方法?

那里有什么好的(最好是免费的)工具吗? 他们能否提供准确的估算值,以反映应用程序上线时的生产结果?