Trình gói
Có vẻ như một số vấn đề khi tải gói đối với tôi. Tôi khuyên bạn nên thực hiện thêm một số phép đo. Bạn có sử dụng 1 bộ đá quý cho mỗi dự án hay lưu trữ mọi thứ trong 1 bộ đá quý (đó là sự thật nếu bạn không sử dụng bộ nào)? Nếu bạn có nhiều đá quý trong 1 thư mục (tức là 1 bộ đá quý cho tất cả) thì cuối cùng nó sẽ làm chậm gói dữ liệu đi rất nhiều, vì nó cần phải đi qua nhiều đường dẫn hơn để thực hiện công việc của mình.
bundle | wc -l # how many gems bundler uses in your current project
gem list -q | wc -l # how many gems in your gemset
If gem list -q | wc -l
báo cáo giá trị khá lớn (Tôi có 237
và mọi thứ có vẻ bình thường đối với tôi), có thể bạn cần chia các viên ngọc đã cài đặt thành một bộ đá quý riêng cho mỗi dự án.
Thực hiện thêm một số phép đo với time
, hãy tìm real
giá trị, đó là tổng số tiền.
Trước tiên, hãy xóa bundled_rspec
của bạn wrapper, nó không cần thiết với RVM mới nhất
các phiên bản.
Sau đó, đo tải rspec của bạn có và không có Bundler:
time rspec -v # with implicit bundler loading, rubygems-bundler gem is in use
time NOEXEC_DISABLE=1 rspec -v # without bundler, disable rubygems-bundler gem for this call`
Nếu time rspec -v
cung cấp cho bạn những con số lớn ngay cả đối với dự án có Gemfile tương đối nhỏ, đó là một vấn đề về gói.
Đường ray
Nút thắt cổ chai tiếp theo thường là chính Rails. Thử đo một kiểm tra không tải Rails (tức là chỉ spec_helper
) và sau đó kiểm tra với rails (tức là với rails_helper
).
Ngay sau khi bạn bắt đầu thấy sự khác biệt lớn về số lượng, bạn sẽ biết mình gặp vấn đề ở đâu.
Mùa xuân
Như một giải pháp khắc phục nhanh để cải thiện hiệu suất đường ray là sử dụng spring
đá quý
. Nếu bạn sử dụng Rails 4.1+ thì Spring đã được kích hoạt.
Để bật Spring cho rspec
thêm vào Gemfile
của bạn
gem 'spring-commands-rspec', group: :development
và chạy
$ bundle install
$ spring binstub --all
Lệnh cuối cùng sẽ tạo trình bao bọc cho tất cả các tệp nhị phân được hỗ trợ mùa xuân trong bin
của dự án của bạn thư mục (hãy xem ở đó và đừng quên cam kết chúng). Sau đó, bạn nên chạy rspec
với bin/rspec
. Lần chạy đầu tiên sẽ vẫn còn chậm, nhưng tất cả các lần chạy sau đó phải đủ nhanh vì Rails sẽ được tải.