2009-08-12 14 views
10

Đường ray, ở chế độ phát triển là SLOW. Rất, rất chậm. Tôi chạy Vista, và tôi thiết lập config.cache_classes = true trong development.rb ... Nhưng, nó vẫn còn chậm và tôi phải khởi động lại máy chủ sau khi tôi thay đổi mã của tôi.Tôi có thể làm gì để tăng tốc độ chế độ phát triển Rails?

Đồng nghiệp của tôi phát triển Rails trên máy Mac và thấy tốc độ chậm tương tự.

Thời gian phát triển của tôi chậm đáng kể vì phải mất vài phút để kiểm tra các thay đổi mã.

Điều này có tốt như phát triển của Rails không? Hay tôi thiếu cái gì đó sẽ làm cho nó nhanh và cuộc sống của tôi hạnh phúc?

+2

Dường như bạn chỉ đang xả hơi ở đây bằng cách bẻ thanh ray. Tôi không phải là người dùng đường ray, nhưng tôi cũng không thấy một câu hỏi thực sự có ý nghĩa được hỏi ở đây. Bạn có hỏi về vấn đề khả năng mở rộng với Rails không? Bạn đang hỏi về các bản sửa lỗi có thể có cho sự chậm chạp này mà bạn đang gặp phải? –

+3

Tôi không bashing Rails. Tôi thích sử dụng Rails vì nhiều lý do, đó là tốc độ máy chủ chế độ phát triển không phải là một trong số đó. Nó không phải là một vấn đề khả năng mở rộng, nó là một vấn đề của tốc độ dev. Về mặt dễ viết mã, Rails đã tiết kiệm cho tôi rất nhiều thời gian. Tôi muốn tiết kiệm hơn nữa với một máy chủ dev nhanh hơn. – user94154

+1

Nó có chạy nhanh trong sản xuất không? – klochner

Trả lời

-13
Andrews-MacBook-Pro:Sites askegg$ rails test 
Andrews-MacBook-Pro:Sites askegg$ cd test 
Andrews-MacBook-Pro:test askegg$ ./script/generate model test 
     exists app/models/ 
     exists test/unit/ 
     exists test/fixtures/ 
     create app/models/test.rb 
     create test/unit/test_test.rb 
     create test/fixtures/tests.yml 
     create db/migrate 
     create db/migrate/20090812005217_create_tests.rb 
Andrews-MacBook-Pro:test askegg$ ./script/performance/benchmarker 1000000 Test.new 
      user  system  total  real 
#1  25.140000 0.200000 25.340000 (25.549605) 

Hmmm. 25 giây để khởi tạo 1 triệu đối tượng trong chế độ phát triển trên một macbook pro với 12 chương trình khác được tải. Có vẻ ổn với tôi.

+3

Vì vậy, bạn đang nói tôi nên đánh giá cao sự phức tạp đằng sau hậu trường mà ứng dụng Rails sắp xếp để cung cấp cho tôi trải nghiệm dev mượt mà và đếm thời gian máy chủ chậm chậm như một mặt nhỏ của sự cân bằng rất tốt? – user94154

+3

Không hề. Tôi đang chứng minh rằng Rails (ít nhất là trên máy của tôi) không hề chậm. Tôi chỉ chạy một thử nghiệm khác (trong chế độ phát triển) trên một dự án mà tôi vừa hoàn thành - nó tải 1.000 đối tượng trong 0,271 giây. Đây là một tiếng kêu xa so với thời gian tải 8 giây của bạn. Đã xảy ra sự cố với cấu hình của bạn, vì vậy nó thực sự không phải là vấn đề cụ thể của Rails. – askegg

+0

Ồ - ngoài việc thử lược tả các cuộc gọi phương thức bạn đang thực hiện để xem ứng dụng có thể đang làm chậm ở đâu. ví dụ: "./script/performance/profiler Page.first 1000" – askegg

0

Tôi giả định rằng các yêu cầu của bạn sẽ mất vài giây? (Nếu không bạn có thể sẽ không nhận thấy). Nó luôn luôn nhanh với tôi. Đặc biệt là kể từ khi tôi bắt đầu sử dụng Sinatra thay vì đường ray: D

Ồ, và tôi quên đề cập đến - tôi đã từng chạy đường ray cục bộ, nhưng hiện tại tôi đang sử dụng máy chủ Centos ảo với VMWare. Cả hai đều nhanh chóng

+0

har har har. Chà, tôi không cần phải giải thích, nhưng Sinatra không phải là một lựa chọn. Tôi đã thâm nhập sâu vào dự án hiện tại của mình. Có thú vị không khi cài đặt một plugin cho phép bạn (cập nhật) chạy mã cập nhật mà không cần khởi động lại máy chủ dev. oh snap :) – user94154

+0

cho tôi biết thêm về máy chủ centos ảo này ... – user94154

+0

Tôi nghĩ VMWare tạo phiên bản cửa sổ, nhưng về cơ bản, bạn mua/tải xuống một chương trình cho phép bạn chạy nhiều hệ điều hành hầu như. Ví dụ, trên mac của tôi, tôi có các cửa sổ và CentOS (Linux) đang chạy trong một máy ảo. Phần mềm này cho phép bạn chia sẻ các thư mục để một thư mục trên máy tính của bạn là máy nhân bản trong hệ điều hành ảo. Bạn thiết lập nó giống như một máy chủ, và nó có địa chỉ IP cục bộ. Bạn có thể nhập địa chỉ IP đó để truy cập hoặc chỉnh sửa tệp lưu trữ của bạn để tạo miền giả. Ví dụ: http: //blog.local chuyển đến máy chủ ảo của tôi. –

0

Tôi đặt config.cache_classes = true in development.rb. Nó vẫn còn chậm và tôi phải khởi động lại máy chủ sau khi tôi thay đổi mã của mình.

Bạn không nên sử dụng bộ nhớ cache đó trong quá trình phát triển (đặc biệt nếu nó vẫn còn chậm khi sử dụng). Việc phải khởi động lại máy chủ mọi lúc sẽ làm chậm bạn nhiều hơn.

Bạn có chắc bản thân Ruby chậm không? Không ví dụ một số mã truy cập DB mà bạn chạy? Bản trình diễn "Hello World" đơn giản có kém không?

Và chúng ta đang nói chậm như thế nào? Thời gian tải trang hơn 10 giây?

+0

thời gian tải khoảng 8 giây. Truy cập DB không chậm, vì tôi có một máy chủ thử nghiệm sản xuất (không phải cục bộ) được kết nối với cùng một DB. cho điểm đầu tiên của bạn, về cơ bản nó là một sự lựa chọn giữa ít tệ hơn của hai tệ nạn. – user94154

7

Bạn đang nói về:

  • Chậm khởi động ứng dụng (như chạy script/server)?

    Nếu đó là khởi động của máy chủ, thì bạn đang sử dụng máy chủ nào? Từ kinh nghiệm của tôi webrick là chậm hơn so với mongrel là chậm hơn so với mỏng. Hành khách thực sự là hiệu quả nhất cho phát triển địa phương (mặc dù tôi đã không bao giờ cố gắng để có được nó chạy trên cửa sổ).


  • phản ứng trang chậm từ đánh máy chủ dev?

    Đây có thể là truy vấn cơ sở dữ liệu không hiệu quả, quá nhiều tính toán trong chế độ xem có thể được làm lại, v.v. Nếu nó chạy ok trong sản xuất, điều này có thể không phải là vấn đề của bạn. Tuy nhiên, máy chủ web bạn chạy sẽ tạo sự khác biệt về tốc độ của bạn tại địa phương. Tôi nghĩ rằng cùng một thứ tự cho khởi động áp dụng cho việc thực hiện là tốt.


  • nhiệm vụ Rake dùng mãi mãi để bắt đầu?

    Tôi cũng gặp vấn đề này. Nếu bạn có một dự án lớn với nhiều plugin (có nghĩa là rất nhiều khởi tạo cần chạy), có thể mất một lúc để tăng tốc môi trường đường ray. Có những thứ có thể sẽ tăng tốc, nhưng không có viên đạn bạc. Hãy chắc chắn rằng bạn không có bất kỳ plugin được cài đặt bạn không còn sử dụng, hãy xem cẩn thận tại môi trường và initializers của bạn để chắc chắn rằng nó là trong hình dạng tốt vv


Tóm lại con người, trong đó nêu "Rails chậm phát triển" không thực sự xác định vấn đề. Nếu bạn có thể làm rõ những gì là chậm, sau đó bạn có thể nhận được trợ giúp cụ thể để tăng tốc độ nó lên. Tôi đã làm việc trên rất nhiều dự án khá lớn đã bị các vấn đề về hiệu suất trong phát triển cũng như sản xuất. Tôi đã không bao giờ có một tình huống mà không thể được cải thiện nếu được sự chú ý đúng. Xác định vấn đề và bạn thường có thể chẩn đoán một giải pháp tốt hơn để tăng tốc mọi thứ.

26

Plugin rails-dev-boost tăng tốc độ chế độ phát triển Rails. Tôi đã gặp vấn đề tương tự, và plugin này làm cho ứng dụng của tôi rất linh hoạt (so với vài giây tải mỗi trang). Nó sẽ chạy ở tốc độ tương tự như sản xuất!

http://github.com/thedarkone/rails-dev-boost

Để cài đặt nó:

script/plugin install git://github.com/thedarkone/rails-dev-boost 
+0

Chỉ cần thử plugin này và nó đã giúp rất nhiều - tuyệt vời, cảm ơn! –

+0

Đá quý này thật tuyệt vời !! Tôi đã quá thất vọng với dev env đang chậm hơn với các ứng dụng trở nên lớn hơn n lớn hơn. Điều này giống như một Thiên Chúa đã gửi một. – Autodidact

+0

dường như cũng giúp ích rất nhiều cho máy mac dev của tôi - đây phải là câu trả lời được chấp nhận – jpwynn

2

Tôi đã chạy vào các vấn đề tương tự. Ứng dụng của tôi, ở chế độ nhà phát triển, tiếp tục nhận được chậm hơn và chậm hơn. Ví dụ, tôi tạo một bộ điều khiển mới với một hành động mới:

def test 
    render :text => 'nothing' 
    end 

Ở chế độ dev, điều này mất từ ​​12-15 giây để hoàn thành (khi yêu cầu qua FF và IE). Tôi đang sử dụng mongrel (không phân cụm). Tôi đang trên một macbook pro.

Ở chế độ prod, quá trình này mất ~ 130ms.

Có một cách để tìm ra tệp nào đang được tải cho mỗi yêu cầu (cấu hình cơ bản) vì vậy tôi có thể cố gắng tìm ra những gì đang xảy ra và nơi nút cổ chai là.

FF Firebug Net cho thấy phần lớn thời gian (11-14 giây) được chi tiêu ở trạng thái WAIT.

điều khiển cho thấy:

Completed in 2ms (View: 0, DB: 152) 

.

Bất kỳ ý tưởng nào?

+0

Tôi cũng gặp vấn đề tương tự. Trong env dev, tải lại trình duyệt mất khoảng 15-20 giây nhưng trong giao diện điều khiển nó chỉ hiển thị ~ 400ms. Điều này đang trở thành một nỗi đau lớn trong ass. Và tôi vẫn chưa tìm ra giải pháp cho nó. – Autodidact

+0

Tôi có cùng trải nghiệm giống nhau. Đêm qua rất nhanh, đã thức dậy sáng nay và giờ nó rất chậm. Chạy 'dscacheutil -flushcache' cũng không giúp được gì. –

1

Tôi đã đến bài đăng này cố gắng hiểu tại sao tôi lại thấy quá nhiều thời gian giữa các yêu cầu trong chế độ phát triển.

Tôi đang làm việc trên một ứng dụng có kích thước khiêm tốn - 4000 LOC, 113 lớp - và trượt nó trên máy chậm. Hơn 9/10 thời gian giữa các yêu cầu xảy ra trong khi tải mã mô hình.

Dự đoán, config.cache_classes = tốc độ thực tăng lên đáng kể.

+0

Yup, tốc độ tăng lên rất nhiều, nhưng nhược điểm là bất cứ khi nào tôi thay đổi một tệp cụ thể, thay đổi này không nhận được do cờ được lưu trong bộ nhớ cache là đúng sự thật. Vì vậy, tôi phải khởi động lại ứng dụng mọi lúc và máy chủ khởi động lại mất khoảng 20-30 giây một lần nữa. – Autodidact

0

Đặt config.cache_classes = true trong development.rb sẽ luôn tăng tốc các ứng dụng lớn hơn ở chế độ dev. Tôi muốn có dòng này trong môi trường dev của tôi:

config.cache_classes = ENV["CACHE_CLASSES"] ? ENV["CACHE_CLASSES"] == "true" : false 

Sau đó, bạn có thể khởi động máy chủ của bạn với:

CACHE_CLASSES=true script/server 

khi bạn muốn thời gian đáp ứng nhanh hơn và không nhớ rằng các lớp học không tải lại trên mỗi yêu cầu.

0

Nếu bạn đang sử dụng phiên bản 3.0 hoặc 3.1 của Rails, bạn có thể sử dụng active reload để tăng tốc thời gian tải trang một cách có điều kiện. Nó được đưa vào Rails 3.2.

1

best way để giúp phát triển nhanh hơn, hãy cài đặt gem có tên active_reload.

Để cài đặt gem này, bạn có thể nhập lệnh,

gem install active_reload

Và, trong gemfile ray dự án của bạn, thêm

gem 'active_reload'

Sau đó, khởi động lại máy chủ của bạn và bạn sẽ tìm thấy chế độ phát triển nhanh hơn nhiều so với trước đây.