Top 8 tools for Ruby on Rails code optimization and cleanup
Giữ code của bạn sạch sẽ và tổ chức cấu trúc tốt trong khi phát triển một ứng dụng Rails lớn là một thách thức ngay cả đối với một lập trình viên có kinh nghiệm. Thật may mắn, có một số gem giúp chúng ta trong công việc này trở nên dễ dàng hơn. Đa số lập trình viên đều tạo ra những "mã chết" ...
Giữ code của bạn sạch sẽ và tổ chức cấu trúc tốt trong khi phát triển một ứng dụng Rails lớn là một thách thức ngay cả đối với một lập trình viên có kinh nghiệm. Thật may mắn, có một số gem giúp chúng ta trong công việc này trở nên dễ dàng hơn.
Đa số lập trình viên đều tạo ra những "mã chết" không hiệu quả theo thời gian. Những người khác khi tiếp quản những dự án được phát triển từ trước sẽ nhận thấy điều đó.
Trên thực tế, kinh nghiệm của riêng tôi với việc làm sạch code bắt nguồn từ việc phải tối ưu hóa ứng dụng Rails của người khác. Xem xét kích thước và độ phức tạp của nó, việc tái cấu trúc code một cách thủ công chắc chắn sẽ rất tẻ nhạt và tốn thời gian, vì vậy tôi quyết định giải phóng bản thân mình bằng cách sử dụng nhiều các công cụ của bên thứ ba.
Nếu bạn cũng muốn giữ code của bạn luôn an toàn và tối ưu hóa, hãy xem một số gem dưới đây đã được tôi dùng trong công việc của tôi:
1. TRACEROUTE
Traceroute là một công cụ làm sạch routes cho các ứng dụng Rails. Nó cung cấp một lệnh rake đơn giản để kiểm tra các routes được ánh xạ tới các controller và tìm ra controller nào không thể truy cập được.
Bạn cũng sẽ phải giữ các controller helper method của bạn và nhiều bộ lọc trước / sau khi private vì chúng không phải là một phần của API công khai. Khi sử dụng gem này đôi lúc có vấn đề với việc hiển thị sai trên mountable engines, nhưng chúng có thể dễ dàng bị bỏ qua.
=> Từ những cảnh báo trên bạn có thể dễ dàng xóa bỏ những khai báo routes thừa không cần thiết. giúp tinh giảm hệ thống của bạn
2. RACK-MINI-PROFILER
Đây là một công cụ tốt được sử dụng để tìm các nút cổ chai của các ứng dụng Rails của bạn. Nó phân tích tốc độ thực về khoảng thời gian để yêu cầu được xử lý và mất bao nhiêu thời gian để thực hiện các render, truy vấn cơ sở dữ liệu và tải DOM. Chỉ cần thêm nó vào Gemfile của bạn và bạn sẽ có một cửa sổ nhỏ ở góc trên bên trái trên trang của bạn, hiển thị cho bạn tất cả các thông tin này.
=> Từ màn hình trên ta có thể dễ dàng thấy được những render hay truy vấn nào đang ngốn nhiều thời gian của hệ thống để đưa ra những giải pháp hợp lí
3. BULLET
Điều này đặc biệt làm tôi thích thú. Các viên đạn "bullet" giúp bạn giết tất cả các truy vấn N + 1, cũng như tải các quan hệ không cần thiết. Một khi bạn cài đặt nó và bắt đầu theo dõi các route khác nhau trong quá trình phát triển, hộp cảnh báo với các cảnh báo chỉ ra các truy vấn cơ sở dữ liệu cần được tối ưu hóa sẽ bật ra. Nó hoạt động ngay trên hộp thoại và rất hữu ích cho việc tối ưu hóa ứng dụng của bạn.
=> Tôi phát triển ứng dụng Rails cũng được một khoảng thời gian tương đối và tôi thấy gem này được dùng nhiều trong các hệ thống lớn, Nó giúp ích rất nhiều khi mà các truy vấn cơ sở dữ liệu trở nên phức tạp khó kiểm soát. Việc tránh tất cả các truy vấn N+1 cải thiện đáng kể hiệu năng của hệ thống.
4. BRAKEMAN
Một công cụ phân tích bảo mật cho các ứng dụng Rails của bạn. Nó quét qua ứng dụng của bạn và đưa ra một bảng các lỗ hổng bảo mật trên hệ thống của bạn. Cảnh báo bảo mật được nhóm lại theo mức độ nghiêm trọng của chúng (Cao, Trung bình và Thấp). Bạn có thể tìm hiểu thêm về ý nghĩa của chúng trên danh sách cảnh báo của Brakeman
Lưu ý rằng ngay cả khi bạn không có bất kỳ cảnh báo nào, điều đó không có nghĩa là ứng dụng của bạn an toàn, vì brakeman đôi khi bỏ qua một số cạm bẫm bảo mật cơ bản.
Bảo mật trong hệ thống, nó đã gọi đến bundler-audit, dùng để kiểm tra các phiên bản của gem trong file Gemfile.lock.
=> Bảo mật luôn là một vấn đề cần được chú trọng đối với những nhà phát triển Web chứ không chỉ là những người sử dụng hệ thống Rails. Các lỗ hổng bảo mật luôn tiềm tàng vì thế đòi hỏi chúng ta phải update thường xuyên, thay đổi không ngừng...
5. DEADWEIGHT
Deadweight được sử dụng để làm sạch CSS selectors không sử dụng. Bạn phải đưa ra một bộ trang tính và trang HTML của mình, và nó sẽ hiển thị các CSS selectors có thể loại bỏ.
Gem này sẽ không hoạt động nếu chúng ta không chỉ định đường dẫn cho nó vì hầu hết các trang đều có nội dung động, nhưng Jason Morrison ở Thoughtbot đã viết bài đăng trên blog về cách tạo Rack Middleware và tích hợp nó vào bộ thử nghiệm của bạn để thu thập tất cả các nội dung HTML một nơi.
Nếu bạn đang sử dụng các trình biên dịch precompilers như Sass hoặc Less, bạn nên biên dịch tất cả các kiểu trang của bạn và đưa chúng ra dưới dạng các tệp CSS đơn giản cho tác vụ deadweight. Chúng tôi khuyên bạn nên xóa tất cả các tệp tin css của nhà cung cấp / bên thứ ba (như tệp Bootstrap và các tệp tương tự) vì chúng sẽ làm tắc nghẽn quá trình chạy của Deadweight.
6. RAILS BEST PRACTICES
Bộ phân tích mã tĩnh để tìm ra các đoạn code smell của Rails. Nó cung cấp một loạt các gợi ý; Sử dụng phạm vi truy cập, hạn chế auto-generated routes, thêm các chỉ mục cơ sở dữ liệu, vv... Để có danh sách đầy đủ các đề xuất, hãy kiểm tra trang chính thức của Rails-best-practices. Thật không may, đôi khi nó cảnh báo quá tích cực chẳng hạn như các methods không sử dụng. Tuy nhiên, nó chứa rất nhiều đề xuất, cảnh báo tốt đẹp và hữu ích sẽ cho bạn một cái nhìn tốt hơn về cách refactor code của bạn và tìm hiểu một số cách thực hành tốt nhất.
Nếu bạn thích những đề xuất mà Rails-best practices đề xuất cho bạn, bạn cũng có thể tìm thấy các quy tắc của Sandi Metz cho các nhà phát triển khá thú vị. Bạn có thể kiểm tra nếu mã của bạn tuân theo các tiêu chuẩn của Sandi với gem sandi_meter
=> Gem này thực sự rất hay và hữu ích. Các bạn hãy cố gắng sử dụng nó để giúp cho từng dòng code của các bạn đều đạt được mức độ chuẩn mực cao.
7. RUBOCOP
Bộ phân tích mã tĩnh Ruby mà bạn có thể sử dụng để kiểm tra xem code của bạn có tuân thủ các hướng dẫn viết code tốt của cộng đồng Ruby. Gem này báo cáo các hành vi vi phạm theo phong cách thông qua dòng lệnh, với rất nhiều các tính năng tái mã nguồn hữu ích như useless variable assignment, redundant use of Object#to_s in interpolation or even unused method argument.
Điều tuyệt vời là nó có thể thay đổi các config nâng cao để phù hợp với yêu cầu của các dự án khác nhau, vì những cảnh báo của Rubocop có thể khá khó chịu nếu bạn không muốn tuân theo Ruby stye guide 100% (ví dụ nếu bạn có nhiều khoảng trống cuối dòng hoặc bạn trích dẫn bằng dấu nháy kép, vv) .
Nó được chia thành 4 phần phân tích (gọi là cops): Style, Lint, Metrics và Rails. Bạn có thể xác định cops mà bạn muốn sử dụng, cũng như các tệp không muốn check / bao gồm và tinh chỉnh các tùy chọn cấu hình khác nhau trong file .rubocop.yml.
=> Đây là một gem vô cùng thuận tiện và được sử dụng rất phổ biến trong các ứng dụng Rails.
8. RUBYCRITIC
Một gem mới bao gồm ba gem phân tích tĩnh - Reek (ruby code smells), Flay (phát hiện code trùng lặp) và Flog (ABC metrics). Nó tạo ra các tập tin HTML với cấu trúc độc đáo để bạn có thể duyệt qua code có mùi(code ko tốt) của bạn và bắt đầu tái cấu trúc. Trong tất cả các công cụ phân tích mã tĩnh được đề cập, thì đây là gem rất tốt vì nó cho chúng ta đầu ra tốt đẹp, thuận tiện nhất để có cái nhìn tổng quan và bình luận với đồng nghiệp của bạn.
Thảo luận
=> Việc ý thức trong từng dòng code là vô cùng quan trọng vì thế mà các lập trình viên pro luôn luôn tinh chỉnh code của họ. Tuy nhiên khi chúng ta phải refactor những code của người khác thì tôi đảm bảo những công cụ trên sẽ giúp các bạn rất nhiều. Rất mong mọi người có thể sử dụng linh hoạt các công cụ trên vào dự án của mình. Good luck! Bài viết của tôi được dịch từ nguồn dưới đây: