Daftar permata dasar untuk profil aplikasi Ruby on Rails

Bahkan sebagian besar pengembang berpengalaman Ruby on Rails kadang-kadang lupa tentang kesalahan menjengkelkan yang mereka hasilkan dalam proses pengembangan yang panjang, seperti n + 1 kueri atau kehilangan banyak waktu dengan beberapa pertanyaan tak terduga entah dari mana.

Tidak semua kesalahan ini dapat dihindari sebelum produksi, tetapi setidaknya Anda dapat mencoba :)

Ya, itu daftar permata lain yang terlupakan atau tidak begitu populer untuk proses pengembangan yang lebih baik.
Mari kita mulai.

1. Peluru


Bullet - salah satu solusi paling populer dan termudah untuk bertarung dengan n + 1 query.

Permata ini menyediakan berbagai cara untuk menunjukkan kepada Anda bahwa beberapa kueri tidak efisien. Browser (log konsol), log pengembangan, file output. Pilihan saya hanya menggunakan log pengembangan karena tidak begitu mengganggu (beberapa masalah menunjukkan tidak tepat waktu atau tidak dapat diselesaikan dengan mudah dengan arsitektur saat ini).

Cara kerjanya : Anda memiliki, misalnya, permintaan indeks untuk beberapa model ( layanan ). Dan model ini memiliki banyak hubungan berbeda ( layanan grup has_many ), mereka juga memiliki hubungan .. ( grup memiliki pengguna banyak , pengguna memiliki logo banyak , dll). Dan itu dapat menyebabkan pemuatan data yang tidak efisien berulang ( n +1 ). Anda ingin menampilkan logo_url dan itu hanya mulai membuat permintaan yang tidak perlu untuk setiap pengguna (kadang-kadang Anda melihatnya segera, kadang-kadang tidak begitu jelas). Dalam sebagian besar kasus, peluru akan membuang baris berikutnya di log dev Anda:

GET /api/services USE eager loading detected Service => [:groups] Add to your finder: :includes => [:groups] Call stack /home/projects/test_app_name/app/services/index.rb:18:in `perform' /home/projects/test_app_name/app/controllers/services_controller.rb:7:in `index' 

Seperti yang Anda lihat, ini menunjukkan permintaan, apa yang ditemukan (eager loading), model dan apa yang dimuat persis beberapa kali. Dan panggilan stack, tentu saja.

Awal yang cukup bagus!



Bullet dapat menemukan pemuatan yang tidak diinginkan dan kontra cache. Dan memungkinkan Anda untuk menonaktifkan detektornya.

 # Each of these settings defaults to true # Detect N+1 queries Bullet.n_plus_one_query_enable = false # Detect eager-loaded associations which are not used Bullet.unused_eager_loading_enable = false # Detect unnecessary COUNT queries which could be avoided # with a counter_cache Bullet.counter_cache_enable = false 



Dalam proyek saya, saya lebih memilih untuk menonaktifkan kueri pemuatan awal yang tidak terpakai karena ini adalah situasi yang umum ketika satu layanan pemuatan model digunakan di banyak tempat, dan untuk tempat yang berbeda, Anda tidak perlu melakukan preload beberapa relasi yang jelas dibutuhkan di beberapa tempat lain. Dan situasi ini sangat mengganggu pada akhirnya. Anda lebih baik memuat beberapa info kemudian lupa memuatnya dengan benar di suatu tempat.

Konfigurasi saya (dalam development.rb ):

 config.after_initialize do Bullet.enable = true Bullet.rails_logger = true Bullet.unused_eager_loading_enable = false end 

Info lebih lanjut :


2. ActiveRecordQueryTrace (active_record_query_trace)


active_record_query_trace - permata yang mencatat / menampilkan jejak balik dari semua kueri SQL yang dijalankan oleh Rekaman Aktif

(Saya baru saja menyalin bagian deskripsi dari halaman Github mereka karena mereka memiliki semua yang perlu Anda ketahui)

Menampilkan backtrace untuk setiap permintaan di konsol pengembangan dan log Rails. Memungkinkan Anda melacak di mana kueri dijalankan di aplikasi Anda. Berguna untuk optimalisasi kinerja dan untuk menemukan tempat memulai ketika membuat perubahan pada aplikasi besar.

Saat diaktifkan, setiap permintaan akan dicatat seperti:

 Started GET "/" for 172.19.0.1 at 2019-09-29 07:08:04 +0000 Processing by HomeController#index as HTML Users::User Load (1.7ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 10014 LIMIT 1 Query Trace: app/controllers/concerns/user_stack.rb:44:in `peek' Clubs::Club Load (1.7ms) SELECT `clubs`.* FROM `clubs` WHERE `clubs`.`id` = 15 LIMIT 1 Query Trace: app/controllers/concerns/user_aware.rb:38:in `current_club' 

Dari pihak saya ingin mengatakan, bahwa permata ini sangat berguna ketika Anda mulai bekerja pada proyek bukan dari awal dan tidak dapat mengetahui bagaimana semuanya bekerja (atau hanya dengan fitur rekan), dan beberapa panggilan permintaan tidak mudah dimengerti. Ini bisa menghemat banyak waktu, sungguh.

Juga sedikit catatan:
Untuk setiap permintaan ActiveRecord akan ada satu backtrace tambahan dalam file log. Secara default, ini 5, yang cukup besar untuk membuat log Anda sepenuhnya tidak dapat dibaca.
Tapi itu bisa dikontrol:

 ActiveRecordQueryTrace.lines = 1 # or 2, something not big 

Info lebih lanjut:


3.rails_panel


RailsPanel adalah ekstensi Chrome untuk pengembangan Rails yang akan mengakhiri tailing of development.log Anda . Miliki semua informasi tentang permintaan aplikasi Rails Anda di browser - di panel Developer Tools. Memberikan wawasan tentang db / rendering / total kali, daftar parameter, tampilan yang diberikan, dan lainnya.

Untuk menggunakan ekstensi ini, Anda perlu menambahkan permata meta_request ke Gemfile aplikasi Anda:

 group :development do gem 'meta_request' end 

Pasang ekstensi RailsPanel dari Chrome WebStore . Ini adalah cara yang disarankan untuk menginstal ekstensi, karena itu akan memperbarui secara otomatis pada setiap versi baru.

Ini adalah contoh permata / ekstensi rails_panel yang diaktifkan:

gambar

Info lebih lanjut:


4. rack-mini-profiler


Setelah menginstal permata dan membuka proyek Anda, Anda akan melihat popup di sudut kiri atas (dapat dikonfigurasi ulang) pada halaman:



Setelah mengkliknya, Anda akan melihat info lebih rinci:



Seperti yang Anda lihat, berikut adalah banyak info berguna untuk pekerjaan yang lebih efisien. Juga, ini berfungsi dengan aplikasi SPA.

Info lebih lanjut:


5. newrelic / datadog


New Relic adalah sistem manajemen kinerja , yang dikembangkan oleh New Relic, Inc. Ini memberi Anda informasi mendalam tentang kinerja aplikasi Rails atau Ruby Anda saat berjalan dalam produksi dan mengirimkannya ke newrelic.com di mana Anda dapat memantau mereka secara real-time . (JUGA MEREKA MEMILIKI ACCOUNT TANPA BAYARAN)

Datadog sebagai alternatif juga merupakan pilihan yang sangat bagus. Mereka menyediakan fungsionalitas yang sama dengan Relik Baru. Cukup periksa kemungkinan mereka, antarmuka pengguna, harga dan pilih apa pun yang Anda inginkan.

Info lebih lanjut:


Terima kasih sudah membaca!

Source: https://habr.com/ru/post/id482330/


All Articles