最近出现了一个非常糟糕的问题。我的Rails(3.2.12)开始非常缓慢地提供资产。未经修改的资产需要一整秒才能返回304。总页面加载时间约为20秒:
"GET / HTTP/1.1" 304 - 13.5556
"GET /application.css HTTP/1.1" 304 - 0.8758
"GET /bootstrap.css HTTP/1.1" 304 - 1.5164
"GET /printing.css HTTP/1.1" 304 - 0.8421
"GET /application.js HTTP/1.1" 200 1335651
从历史上看,应用程序从未如此缓慢。
后续重新加载同一资产仍需要半秒钟
"GET /pages/logo-white-topbar.png HTTP/1.1" 200 785 1.0668
"GET /pages/logo-white-topbar.png HTTP/1.1" 304 - 0.6074
"GET /pages/logo-white-topbar.png HTTP/1.1" 304 - 0.5951
"GET /pages/logo-white-topbar.png HTTP/1.1" 304 - 0.6449
"GET /pages/logo-white-topbar.png HTTP/1.1" 304 - 0.6031
关于这个问题的一些奇怪的事情:
所以我尝试了所有事情,从最容易开始,越来越难:
没有任何效果。一切都很慢。
最后,我吹走了我的项目目录并重新克隆了应用程序。我跑了它,并在合理的时间内提供了资产。
"GET /pages/logo-white-topbar.png HTTP/1.1" 200 2267 0.2029
"GET /pages/logo-white-topbar.png HTTP/1.1" 304 - 0.1827
"GET /pages/logo-white-topbar.png HTTP/1.1" 304 - 0.1822
我的意思是,我们并没有点燃这个世界,但这是一个显着的进步。页面加载从20秒到4秒。
我的旧目录和新的克隆目录唯一不同的是我在旧目录中有69个git分支。显然,我应该清理它们。大多数都是完全合并的,但有些只是长期运行的功能分支。
我的问题是:这是一个合法的问题吗?有70个分支机构真的压缩了资产管道的表现吗?这是为什么?我的.git难以置信吗?我显然不太了解git来处理这个问题。
这是OSX 10.8.4上的git 1.8.1.2
感谢。
更新:Rein建议git是一只红鲱鱼,让我窥探其他匪徒。结果我的日志目录已经膨胀到巨大的大小。我吹走了它,但没有任何区别。外部资产(例如来自mixpanel)在24ms内提供服务是荒谬的,但我的本地机器需要1000ms才能在一个小的js文件上提供304.
更新2: .git/objects/pack
在慢速仓库中是104MB,即使在运行git gc
之后该目录也有大量松散文件。新克隆的仓库有20MB { {1}}文件夹,没有松散的物体。
答案 0 :(得分:4)
这几乎可以肯定是红鲱鱼。
git分支实际上只不过是.git/refs/heads
中的一个41字节文件,我没有看到任何可能的方式,仅仅存在该文件会导致此问题。
资产管道根本不知道您的项目是否使用git,因此它不会在幕后进行任何git操作。
尝试复制原始git repo并删除所有分支以查看它是否实际改变了性能。