আমার জাজানো অ্যাপ্লিকেশনটি উত্পাদনের জন্য বেদনাদায়কভাবে ধীর হয়ে গেছে। সম্ভবত এটি কিছু জটিল বা আন-ইনডেক্সযুক্ত প্রশ্নের জন্য।
আমার অ্যাপ্লিকেশনটি প্রোফাইল দেওয়ার কোনও জ্যাঙ্গো-ইশ উপায় আছে?
উত্তর:
ব্যবহার করে দেখুন জ্যাঙ্গো ডিবাগ টুলবার । এটি আপনাকে দেখাবে যে প্রতিটি পৃষ্ঠায় কোন প্রশ্নগুলি কার্যকর করা হয় এবং তারা কত সময় নেয়। এটি সত্যই কার্যকর, শক্তিশালী এবং সহজেই ব্যবহারযোগ্য সরঞ্জাম।
এছাড়াও, ডকুমেন্টেশন থেকে ডেটাবেস অ্যাক্সেস অপ্টিমাইজেশনে জ্যাঙ্গো পারফরম্যান্স সম্পর্কে প্রস্তাবনাগুলি পড়ুন ।
আর জ্যাঙ্গো কর্মক্ষমতা টিপস জ্যাকব কাপলান-মস দ্বারা।
গুগলে কেবল "জ্যাঙ্গো-প্রোফাইলিং" টাইপ করুন, আপনি এই লিঙ্কগুলি (এবং আরও অনেক কিছু) পাবেন:
http://code.djangoproject.com/wiki/ProfilingDjango
http://code.google.com/p/django-profiling/
http://www.rkblog.rk.edu.pl/w/p/django-profiling-hotshot-and-kcachegrind/
ব্যক্তিগতভাবে আমি মিডওয়্যার পদ্ধতির ব্যবহার করছি - অর্থাত্ প্রতিটি ব্যবহারকারী একটি অধিবেশন সঞ্চিত "প্রোফাইলিং" পতাকাটি টগল করতে পারে এবং যদি আমার প্রোফাইলিং মিডলওয়্যার লক্ষ্য করে যে একটি পতাকা সেট করা আছে, এটি পাইথনের হটশট মডিউলটি এর মতো ব্যবহার করে :
def process_view(self, request, view_func, view_args, view_kwargs):
# setup things here, along with: settings.DEBUG=True
# to get a SQL dump in connection.queries
profiler = hotshot.Profile(fname)
response = profiler.runcall(view_func, request, *view_args, **view_kwargs)
profiler.close()
# process results
return response
সম্পাদনা: কনস্ট্যান্টিন দ্বারা উল্লিখিত এসকিউএল কোয়েরিগুলি http://github.com/robhudson/django-debug-toolbar প্রোফাইলিংয়ের জন্য একটি দুর্দান্ত জিনিস - তবে যদি আপনার প্রশ্নগুলি সত্যিই ধীর হয় (সম্ভবত এটিতে শত বা হাজার হাজার রয়েছে) তবে আপনি এটি কোনও ব্রাউজারে লোড না হওয়া পর্যন্ত পাগল পরিমাণের জন্য অপেক্ষা করবে - এবং তারপরে স্বচ্ছলতার কারণে ব্রাউজ করা শক্ত হবে। এছাড়াও, জ্যাঙ্গো-ডিবাগ-টুলবার ডিজাইন দ্বারা এজেএক্স অনুরোধগুলির অভ্যন্তরীণগুলিতে দরকারী অন্তর্দৃষ্টি দিতে অক্ষম।
সম্পাদনা 2: -এক্সটেনশনের একটি দুর্দান্ত প্রোফাইলিং কমান্ড অন্তর্নির্মিত রয়েছে:
https://github.com/django-extensions/django-extensions/blob/master/docs/runprofileserver.rst
শুধু এটি করুন এবং ভয়েলা:
$ mkdir /tmp/my-profile-data
$ ./manage.py runprofileserver --kcachegrind --prof-path=/tmp/my-profile-data
python manage.py runprofileserver --prof-path=/path/to/dir
এই ব্লগটি অনুসরণ করুন: ডার্ককোডিং . नेट / সোফওয়্যার / প্রোফিলিং -ডজ্যাঙ্গো-ফর -সিপিইউ-বাউন্ড- অ্যাপস ।
hotshot
পাইথন 3- ProfilingDjango
তে অবহেলা ও অপসারণ করা হয়েছে, সুতরাং এই উত্তরটি এবং উইকির পৃষ্ঠা 20202
প্রোফাইল ডেটা অ্যাক্সেসের জন্য (যা যেখানে বেশিরভাগ সময় বাধা রয়েছে) জ্যাঞ্জো-লাইভ-প্রোফাইলার পরীক্ষা করে দেখুন । জ্যাঙ্গো ডিবাগ সরঞ্জামদণ্ডের বিপরীতে এটি একই সাথে সমস্ত অনুরোধের মধ্যে ডেটা সংগ্রহ করে এবং আপনি খুব বেশি পারফরম্যান্স ওভারহেড ছাড়াই বা আপনার অ্যাপ্লিকেশনটির অভ্যন্তরীণতা প্রকাশ না করেই এটি উত্পাদন করে চালাতে পারেন।
এখানে নির্লজ্জ প্লাগ, তবে আমি সম্প্রতি এই উদ্দেশ্যে https://github.com/django-silk/silk তৈরি করেছি । এটি কিছুটা জাঙ্গো টুলবারের মতো তবে ইতিহাস, কোড প্রোফাইলিং এবং সমস্ত কিছুর উপর আরও সূক্ষ্ম দানাদার নিয়ন্ত্রণের সাথে।
আপনার কে কেচেগ্রিন্ড ভক্তদের জন্য, আমি দেখতে পেয়েছিলাম যে জ্যাঙ্গোর দুর্দান্ত পরীক্ষা দিয়ে শেলটি খুব সহজেই ব্যবহার করা যায় with Client
বিশেষ করে উত্পাদনে ফ্লাইটে লগ তৈরির জন্য । আমি এই প্রযুক্তিটি এখন বেশ কয়েকটি অনুষ্ঠানে ব্যবহার করেছি কারণ এটির হালকা স্পর্শ রয়েছে - কোনও পেস্কি মিডলওয়্যার বা তৃতীয় পক্ষের জ্যাঙ্গো অ্যাপ্লিকেশনগুলির প্রয়োজন নেই!
উদাহরণস্বরূপ, কোনও নির্দিষ্ট ভিউ যা ধীর গতিতে চলছে বলে মন্তব্য করতে, আপনি শেলটি খুলতে এবং এই কোডটি টাইপ করতে পারেন:
from django.test import Client
import hotshot
c = Client()
profiler = hotshot.Profile("yourprofile.prof") # saves a logfile to your pwd
profiler.runcall(c.get, "/pattern/matching/your/view/")
profiler.close()
ফলাফলের লগটি ভিজ্যুয়ালাইজ করতে, আমি হটশট 2 ক্যাচেগ্রিন্ড ব্যবহার করেছি:
তবে অন্যান্য বিকল্পগুলিও রয়েছে:
যখন ভিউগুলি এইচটিএমএল নয়, উদাহরণস্বরূপ জেএসওএন, প্রোফাইলের জন্য সাধারণ মিডলওয়্যার পদ্ধতি ব্যবহার করুন।
এখানে কয়েকটি উদাহরণ দেওয়া হল:
https://gist.github.com/1229685 - সমস্ত স্কোর কল ক্যাপচার দেখুন into
https://gist.github.com/1229681 - ভিউ তৈরি করতে ব্যবহৃত সমস্ত পদ্ধতি কল প্রোফাইল profile
আমার সম্প্রতি একটি জ্যাঙ্গো অ্যাপ্লিকেশনটি প্রোফাইল করা দরকার এবং এর মধ্যে অনেকগুলি পরামর্শ চেষ্টা করেছিলাম। আমি এর পরিবর্তে পাইয়েনস্রামেন্ট ব্যবহার করে শেষ করেছি , যা মিডওয়্যার তালিকার একক আপডেট ব্যবহার করে একটি জ্যাঙ্গো অ্যাপে যুক্ত করা যেতে পারে এবং সময়গুলির স্ট্যাক-ভিত্তিক ভিউ সরবরাহ করে provides
কিছু অন্যান্য সরঞ্জামের সাথে আমার অভিজ্ঞতার দ্রুত সংক্ষিপ্তসার:
pyinstrument
cProfile
সময় অ্যাক্সেসের একটি সহজ উপায়ও সরবরাহ করে এবং স্বয়ংক্রিয়ভাবে এজাক্সের সময়গুলি প্রদর্শন করে, যা উভয়ই সত্যই সহায়ক হতে পারে।অন্যান্য চেষ্টা করা সরঞ্জামগুলির সাথে তুলনা করা, pyinstrument
ইনস্টল করা এবং ব্যবহার করা নাটকীয়ভাবে সহজ easier