Computer >> Máy Tính >  >> Lập trình >> Ruby

Một cách mới để hiểu hiệu suất ứng dụng Rails của bạn

Ứng dụng Rails của bạn có chậm không?

Khi phải mất vài giây để tải những gì phải là một chế độ xem đơn giản, bạn có một vấn đề đáng phải tìm hiểu.

Bạn có thể có quá nhiều lệnh gọi cơ sở dữ liệu hoặc một số phương thức chậm. Hoặc có thể đó là vòng lặp tăng tốc mà ai đó đã nhập mã của bạn và quên mất.

Bạn có thể tìm thấy nhiều công cụ để giúp bạn tìm ra điều gì đang làm ứng dụng của bạn chậm lại. Một vài tuần trước, tôi đã nói về rbtrace . rpm của Di tích mới gem cũng đã giúp tôi tăng tốc ứng dụng của mình.

Nhưng công cụ yêu thích của tôi để khám phá các vấn đề về hiệu suất còn làm được nhiều điều hơn thế. Ngoài ra, nó cho bạn biết mã của bạn đang làm gì. Nhưng khi bạn thêm một plugin vào nó, nó thậm chí còn trở nên mạnh mẽ hơn. Nó giúp bạn xem các vấn đề về hiệu suất ứng dụng của bạn, về mặt hình ảnh. Và điều đó có thể giúp bạn tìm và sửa các ứng dụng chạy chậm, nhanh hơn.

Hồ sơ Rails yêu thích của tôi

Công cụ hiệu suất Rails yêu thích của tôi có tên là rack-mini-profiler . Khi bạn thêm đá quý đó vào ứng dụng của mình, bạn sẽ nhận được một chỉ báo nhỏ trên mỗi trang của mình. Nó trông như thế này:

Một cách mới để hiểu hiệu suất ứng dụng Rails của bạn

Nếu bạn nhấp vào hộp đó, nó sẽ mở rộng và bạn có thể thấy tất cả các loại nội dung tuyệt vời. Các câu lệnh SQL nào đã được chạy, mất bao lâu để hiển thị các phần tử và hơn thế nữa:

Một cách mới để hiểu hiệu suất ứng dụng Rails của bạn

MiniProfiler cung cấp cho bạn lời nhắc liên tục về thời gian tải mỗi trang. Điều đó giúp bạn tìm hiểu thêm về cách ứng dụng của bạn đang hoạt động. Bạn sẽ xây dựng cảm giác trực quan về trang nào chậm và trang nào nhanh. Bạn sẽ bắt đầu nhận thấy khi một trang mất nhiều thời gian đáng ngạc nhiên để hiển thị. Và bạn có thể bắt đầu sửa chữa nó ngay lập tức, trong khi nó vẫn còn trong tâm trí của bạn.

MiniProfiler có thể làm được nhiều hơn thế. Nhưng trước tiên, bạn sẽ phải cài đặt flamegraph đá quý.

Khi làm điều đó, bạn sẽ mở ra một cách mới để xem hiệu suất ứng dụng của mình.

​​Flamegraph:chính xác như âm thanh của chúng

Một máy ghi lửa trông như thế này:

Một cách mới để hiểu hiệu suất ứng dụng Rails của bạn

Khá rõ ràng tên đến từ đâu, phải không?

Sau khi bạn cài đặt rack-mini-profiler đá quý và flamegraph đá quý, bạn có thể xem bảng ghi lửa cho bất kỳ yêu cầu nào của mình. Chỉ cần thêm pp=flamegraph dưới dạng tham số HTTP, sẽ trông giống như sau:

https://www.example.com/restaurants?pp=flamegraph

Hình ngọn lửa sẽ bật lên và bạn có thể phóng to và thu nhỏ, cuộn xung quanh và cố gắng tìm những điều thú vị để khám phá.

Mỗi "lớp" trong máy ghi lửa là một dòng trong một dấu vết ngăn xếp:

Một cách mới để hiểu hiệu suất ứng dụng Rails của bạn

Và trục hoành là thời gian. Vì vậy, phía ngoài cùng bên trái của biểu đồ là khi yêu cầu của bạn bắt đầu và phía ngoài cùng bên phải là khi yêu cầu kết thúc.

Vì vậy, nó chắc chắn trông rất ngầu. Nhưng bạn có thể làm gì với một máy ghi lửa?

Cách sử dụng máy đo ngọn lửa

Bởi vì trục X đại diện cho thời gian, bạn thực sự có thể có được bức tranh rõ ràng về vị trí mà ứng dụng của bạn đang sa lầy. Các lớp rộng nhất mất nhiều thời gian nhất để chạy. Chúng là những lĩnh vực đầu tiên bạn nên xem xét, bởi vì việc tăng tốc chúng có thể có tác động lớn nhất.

Ứng dụng của bạn dành bao nhiêu thời gian để hiển thị chế độ xem của bạn? Trong hành động điều khiển? Đánh vào cơ sở dữ liệu? Kết xuất các phần?

Tất cả những thứ đó thực sự dễ nhìn, trực quan:

Một cách mới để hiểu hiệu suất ứng dụng Rails của bạn

Còn một điều hữu ích khác mà máy ghi lửa có thể chỉ cho bạn:

Bạn có thấy một đám gai có cùng chiều cao như thế này không?

Một cách mới để hiểu hiệu suất ứng dụng Rails của bạn

Điều đó thường có nghĩa là bạn có một số loại truy vấn N + 1. Bạn đang thiếu một includes ở đâu đó hoặc thực hiện một loạt lệnh gọi tới một API. Nếu bạn đã thêm một includes , bạn sẽ nhận được một bản ghi ngọn lửa trông giống như thế này:

Một cách mới để hiểu hiệu suất ứng dụng Rails của bạn

Các truy vấn SQL N + 1 khá dễ thấy với hầu hết các công cụ hiệu suất:bạn chỉ cần tìm các lệnh gọi SQL trông tương tự. Nhưng các vấn đề không phải SQL N + 1, chẳng hạn như nhấn một API quá nhiều lần, khó nhận thấy hơn rất nhiều. Đặc biệt nếu việc ghi nhật ký của bạn không tốt như vậy.

Tuy nhiên, với máy đo ngọn lửa, những vấn đề đó có thể nhìn thấy rõ hơn rất nhiều.

Điều gì không cần chú ý

Flamegraphs có thể gây choáng ngợp. Chúng hiển thị cho bạn rất nhiều thông tin và bạn bị buộc phải tiếp nhận tất cả cùng một lúc. Vậy bạn có thể bỏ qua điều gì?

Thông thường, bạn có thể bỏ qua các lớp dưới cùng và trên cùng của biểu đồ. Thay vào đó, tôi bắt đầu khám phá khoảng giữa của biểu đồ, hoặc có thể là 3/4 con đường lên đến đỉnh. Đó là nơi mã của tôi có xu hướng hoạt động.

Phần trên cùng của biểu đồ thường có liên quan đến ActiveRecord- hoặc IO và phần dưới là mã khung Rails, vì vậy có thể hiểu rằng mã của bạn sẽ nằm ở đâu đó về phía giữa.

Bạn đã bao giờ sử dụng một máy ghi lửa chưa? Đây là một cách tuyệt vời để tìm những vị trí tốt nhất để tối ưu hóa. Hãy thử một lần đi! Thêm rack-mini-profilerflamegraph đá quý vào Gemfile của bạn . Bạn sẽ ngạc nhiên về việc bạn sẽ nhận được nhiều thông tin chi tiết hơn về mã của mình.