আপনার রেল অ্যাপ কি ধীর?
একটি সাধারণ দৃশ্য কী হওয়া উচিত তা লোড হতে যখন সেকেন্ড সময় লাগে, তখন আপনার কাছে খনন করার মতো সমস্যা হয়৷
আপনার অনেক বেশি ডাটাবেস কল বা কিছু ধীর পদ্ধতি থাকতে পারে। অথবা হয়ত এটি সেই স্পিডআপ লুপ যে কেউ আপনার কোডটি রেখেছে এবং ভুলে গেছে।
আপনার অ্যাপটি কী ধীর করছে তা খুঁজে বের করতে আপনি অনেক টুল খুঁজে পেতে পারেন। কয়েক সপ্তাহ আগে, আমি rbtrace
সম্পর্কে কথা বলেছিলাম . নতুন Relic এর rpm
রত্ন আমাকে আমার অ্যাপের গতি বাড়াতে সাহায্য করেছে।
কিন্তু কর্মক্ষমতা সমস্যা অন্বেষণের জন্য আমার প্রিয় টুল আরও অনেক কিছু করে। বাক্সের বাইরে, এটি আপনাকে দেখায় যে আপনার কোডটি কী করছে৷ কিন্তু আপনি যখন এটিতে একটি প্লাগইন যুক্ত করেন, তখন এটি আরও শক্তিশালী হয়ে ওঠে। এটি আপনাকে দেখতে সাহায্য করে৷ আপনার অ্যাপের কর্মক্ষমতা সমস্যা, দৃশ্যত। এবং এটি আপনাকে দ্রুত গতির অ্যাপ্লিকেশানগুলি খুঁজে পেতে এবং ঠিক করতে সাহায্য করতে পারে৷
৷আমার প্রিয় রেল প্রোফাইলার
আমার প্রিয় রেল পারফরম্যান্স টুলটিকে rack-mini-profiler
বলা হয় . আপনি যখন আপনার অ্যাপে সেই রত্নটি যোগ করেন, তখন আপনি আপনার প্রতিটি পৃষ্ঠায় একটি সামান্য সূচক পাবেন। এটা এই মত দেখায়:
আপনি যদি সেই বাক্সে ক্লিক করেন, এটি প্রসারিত হয় এবং আপনি সমস্ত ধরণের দুর্দান্ত জিনিস দেখতে পারেন৷ কোন SQL স্টেটমেন্ট চালানো হয়েছে, আংশিক রেন্ডার করতে কত সময় লেগেছে এবং আরও অনেক কিছু:
মিনিপ্রোফাইলার আপনাকে একটি ধ্রুবক অনুস্মারক দেয় প্রতিটি পৃষ্ঠা লোড হতে কতক্ষণ সময় নেয়। এটি আপনাকে আপনার অ্যাপ কীভাবে পারফর্ম করছে সে সম্পর্কে আরও জানতে সাহায্য করে। কোন পৃষ্ঠাগুলি ধীর এবং কোনটি দ্রুত তা আপনি একটি স্বজ্ঞাত ধারণা তৈরি করবেন। যখন একটি পৃষ্ঠা রেন্ডার হতে আশ্চর্যজনকভাবে দীর্ঘ সময় নেয় তখন আপনি লক্ষ্য করতে শুরু করবেন। এবং আপনি এখনই এটি ঠিক করা শুরু করতে পারেন, যখন এটি এখনও আপনার মনে থাকে৷
৷
MiniProfiler আরও কিছু করতে পারে। কিন্তু প্রথমে, আপনাকে flamegraph
ইনস্টল করতে হবে মণি।
আপনি যখন এটি করবেন, তখন আপনি আপনার অ্যাপের কর্মক্ষমতা দেখতে একটি নতুন উপায় আনলক করবেন।
ফ্ল্যামগ্রাফগুলি:ঠিক ততটাই মজাদার যেমন তারা শোনায়
একটি ফ্লেমগ্রাফ দেখতে এইরকম:
নামটি কোথা থেকে এসেছে তা বেশ পরিষ্কার, তাই না?
আপনি rack-mini-profiler
ইনস্টল করার পরে রত্ন এবং flamegraph
মণি, আপনি আপনার যেকোনো অনুরোধের জন্য একটি ফ্লেমগ্রাফ দেখতে পারেন। শুধু pp=flamegraph
যোগ করুন একটি HTTP প্যারামিটার হিসাবে, যা দেখতে এইরকম হবে:
https://www.example.com/restaurants?pp=flamegraph
ফ্লেমগ্রাফ পপ আপ হবে, এবং আপনি জুম ইন এবং আউট করতে পারেন, চারপাশে স্ক্রোল করতে পারেন এবং অন্বেষণ করার জন্য আকর্ষণীয় জিনিসগুলি খুঁজে বের করার চেষ্টা করতে পারেন৷
ফ্লেমগ্রাফের প্রতিটি "স্তর" একটি স্ট্যাক ট্রেসের একটি লাইন:
এবং অনুভূমিক অক্ষ হল সময়৷৷ তাই গ্রাফের বাম দিকটি হল যখন আপনার অনুরোধ শুরু হয় এবং যখন অনুরোধটি শেষ হয় তখন ডানদিকে থাকে৷
সুতরাং, এটা অবশ্যই শান্ত দেখায়. কিন্তু আপনি একটি ফ্লেমগ্রাফ দিয়ে কি করতে পারেন?
কিভাবে একটি ফ্লেমগ্রাফ ব্যবহার করবেন
যেহেতু X অক্ষ সময়ের প্রতিনিধিত্ব করে, আপনি সত্যিই একটি পরিষ্কার ছবি পেতে পারেন যেখানে আপনার অ্যাপটি আটকে যাচ্ছে। প্রশস্ত স্তরগুলি চলতে সবচেয়ে বেশি সময় নেয়৷৷ সেগুলি হল আপনার প্রথম ক্ষেত্রগুলির দিকে নজর দেওয়া উচিত, কারণ সেগুলিকে দ্রুত করা সবচেয়ে বড় প্রভাব ফেলতে পারে৷
৷আপনার দৃশ্য রেন্ডার করার জন্য আপনার অ্যাপ কত সময় ব্যয় করছে? নিয়ন্ত্রক কর্মে? ডাটাবেস আঘাত? রেন্ডারিং আংশিক?
এগুলি সবই দৃশ্যত দেখতে সহজ:
আরেকটি দরকারী জিনিস আছে যা একটি ফ্লেমগ্রাফ আপনাকে দেখাতে পারে:
আপনি কি একগুচ্ছ স্পাইক দেখতে পাচ্ছেন যেগুলি প্রায় একই উচ্চতা, এইরকম?
এর মানে প্রায়শই আপনার কাছে কোনো ধরনের N+1 প্রশ্ন থাকে। আপনি একটি includes
মিস করছেন কোথাও, অথবা একটি API-তে একগুচ্ছ কল করা। আপনি যদি একটি includes
যোগ করেন , আপনি একটি ফ্লেমগ্রাফ পাবেন যা দেখতে অনেকটা এরকম:
N+1 SQL ক্যোয়ারীগুলি বেশিরভাগ পারফরম্যান্স সরঞ্জামগুলির সাথে দেখতে বেশ সহজ:আপনি কেবল একই রকমের SQL কলগুলি সন্ধান করুন৷ কিন্তু নন-SQL N+1 সমস্যা, যেমন একটি API অনেকবার আঘাত করা, লক্ষ্য করা অনেক কঠিন৷ বিশেষ করে যদি আপনার লগিংটি দুর্দান্ত না হয়।
যদিও ফ্লেমগ্রাফের সাহায্যে সেই সমস্যাগুলো অনেক বেশি দৃশ্যমান।
কী বিষয়ে মনোযোগ দেওয়া উচিত নয়
Flamegraphs অপ্রতিরোধ্য হতে পারে. তারা আপনাকে অনেক তথ্য দেখায়, এবং আপনি একযোগে এটি নিতে বাধ্য হন। তাহলে আপনি কি উপেক্ষা করতে পারেন?
সাধারণত, আপনি গ্রাফের নীচে এবং উপরের স্তরগুলি এড়িয়ে যেতে পারেন৷৷ পরিবর্তে, আমি গ্রাফের মাঝামাঝি বা উপরের দিকে যাওয়ার পথের 3/4 জুড়ে অন্বেষণ শুরু করি। সেখানেই আমার কোড হ্যাং আউট হতে থাকে।
গ্রাফের উপরের অংশটি সাধারণত ActiveRecord- বা IO-সম্পর্কিত, এবং নীচের অংশটি রেল ফ্রেমওয়ার্ক কোড, তাই এটি বোঝা যায় যে আপনার কোডটি মাঝখানের দিকে থাকবে।
আপনি কি কখনও একটি ফ্লেমগ্রাফ ব্যবহার করেছেন? তারা অপ্টিমাইজ করার জন্য সেরা জায়গাগুলি খুঁজে পাওয়ার একটি দুর্দান্ত উপায়। সুতরাং এটা চেষ্টা করে দেখো! rack-mini-profiler
যোগ করুন এবং flamegraph
আপনার Gemfile
-এ রত্ন . আপনি আপনার কোডে আরও কতটা অন্তর্দৃষ্টি পাবেন তা আপনি অবাক হবেন৷