কিছু লোকের কাছ থেকে শুনেছি যারা বড় রেইলস ভিউকে ছোট পারশিয়ালে ভাঙায় চিন্তিত: একটি পারশিয়াল রেন্ডার করার সত্যিকারের কতটুকু টাইম লাগে? পারশিয়াল কল করার পারফরম্যান্স ইম্প্যাক্ট কি কোড রিডেবিলিটির বেনিফিটকে আওয়ারশেড করবে?
আমি কিছু নাম্বার রান করলাম যাতে সিম্পল পারশিয়াল রেন্ডারিং ইনলাইন রেন্ডারিংয়ের সাথে কেমন কম্পেয়ার করে সেটি উদাহরণ দিয়ে বোঝাতে পারি, যাতে আমরা ট্রেডঅফ আনাेचর ডিসকাস করতে পারি। এটি হল বেঞ্চмар্ক করার জন্য আমি যে কোডটি ব্যবহার করলাম, একটি ব্র্যান্ড নিউ রেইলস অ্যাপে (সহ config.cache_classes = true):
<% require 'benchmark'
Benchmark.bmbm do |x|
x.report "inline" do
10000.times do -%>
Hello!
<% end
end
x.report "partial" do
10000.times do -%>
<%= render partial: "hello" %>
<% end
end
end -%>
Hello!
এবং রেজাল্ট (Ruby 2.1 এবং Rails 4.0.2 ব্যবহার করে, 2013 15" Retina Macbook Pro-তে):
Rehearsal -------------------------------------------
inline 0.010000 0.000000 0.010000 ( 0.007045)
partial 0.970000 0.090000 1.060000 ( 1.050433)
---------------------------------- total: 1.070000sec
user system total real
inline 0.010000 0.000000 0.010000 ( 0.005529)
partial 0.920000 0.070000 0.990000 ( 0.997491)
তাহলে, একটি পারশিয়াল রেন্ডার একটি স্পিডি মেশিনে গড়ে প্রায় ০.১ms ধরে। এটি ইনলাইন রেন্ডারিং থেকে অনেক স্লোয়ার, কিন্তু đủ ফাস্ট যে আপনি এটি নোটিস করতে পারবেন না যখন আপনার URL জেনারেশন, রেইলস হেল্পার, এবং ব্রাউজার রেন্ডারিং টাইমও থাকবে।
স্পিড সকল কিছু নয়
যদি পারশিয়াল রেন্ডারিংয়ের পারফরম্যান্স অনেক খারাপ হতো, আমি তারপরও বড় ভিউগুলো ছোট পারশিয়ালে ভাঙার সিদ্ধান্ত নিতাম।
একটি ফ্রেইজ আছে, Make It Work, Make It Right, Make It Fast। যখন আপনি একটি খুব বড় ভিউ ফিক্স করার চেষ্টা করছেন, তখন আপনি "Make it Work" মোড থেকে বের হতে চাচ্ছেন, এবং আপনি সরাসরি "Make it Fast"-এ যাবেন না। আপনি আপনার কোডকে কম মেইনটেনেবল করবেন, এবং আপনি কিছু রিফ্যাক্টরিং অপচুনিটি মিস করতে পারেন, যা ক্যাশিং অপচুনিটিতে লিড করতে পারে, যা আরও বড় পারফরম্যান্স বেনিফিট দিতে পারে।
আপনি মাপা না করলে জানতে পারবেন না
আপনি আমার নাম্বারগুলো বিশ্বাস করতে বাধ্য নন। আমি রিকমেন্ড করব আপনি না করুন! Ruby-এর Benchmark লাইব্রেরি আপনাকে কিছু সিম্পল টুল দিয়ে আপনার নিজের বেঞ্চмар্ক রান করতে দেয়। ফুল স্ট্যাক প্রোফাইল করার জন্যও টুল আছে, যেমন New Relic এবং MiniProfiler। আমি আমার ডে-টু-ডে কাজে এই তিনটিই খুব রেগুলারলি ব্যবহার করি।
যখন আপনি প্রোফাইল করবেন, সবসময় প্রোডাকশন মোডে প্রোফাইল করুন! রেইলস ডেভেলপমেন্ট এনভাॅইরনমেন্ট ক্লাস এবং ভিউ অটো-রিলোড করে, যা ডেভেলপমেন্টের সময় উপযোগী, কিন্তু আপনার পারফরম্যান্স নাম্বারকে মার দেবে।