somewhere in... blog
x
ফোনেটিক ইউনিজয় বিজয়

৪০টি টিপস(সাথে বোনাস): PHP অপটিমাইজ করুন

০৭ ই সেপ্টেম্বর, ২০০৯ বিকাল ৩:৫৭
এই পোস্টটি শেয়ার করতে চাইলে :

1. কোনো মেথড যদি static করা যায় তাহলে তাই করুন, কারণ তাতে স্পীড ৪গুণ বাড়বে।
2. echo কনস্ট্রাক্টটি print এর চাইতে দ্রুততর। তবে print এর একটি রিটার্ন ভ্যালু আছে এবং এটি মাত্র একটি প্যারামিটার নেয়।
3. কনক্যাট করার চেয়ে echo এর একাধিক প্যারামিটার পদ্ধতি অর্থাৎ কমা ব্যবহার করে স্ট্রিং আর ভ্যারিয়েবল আলাদা করুন।
4. for লুপের maxvalue আগেই নির্ধারণ করুন, লুপের ভেতর সেটি করবেন না। অথাৎ ক্যালকুলেট করে লুপ চলাকালীন যাতে প্রতিবার বের করতে না হয়।
5. আপনার ব্যবহৃত ভ্যারিয়েবলগুলোকে আনসেট করে মেমোরি ফ্রি করুন, বিশেষ করে বড় বড় অ্যারে নিয়ে যখন কাজ করবেন, সেগুলোকে আনসেট করতে ভুলবেন না।
6. __get, __set, __autoload এজাতীয় ম্যাজিক মেথডগুলো এড়িয়ে চলতে পারলে ভালো। তবে আজকাল ফ্রেমওয়ার্কগুলোতে এগুলো ব্যবহার করা হয় অনেক বেশি পরিমাণে।
7. require_once() ফাংশনটি এক্সপেনসিভ, পারলে এটির ব্যবহার করবেন না।
8. যদি আপনার ফাইলসমূহের ইনক্লুড পাথ জানা থাকে তবে অ্যাবসোলিউট পাথ ব্যবহার করুন(প্রোগ্রাম এক্সিকিউশন অনেক দ্রুততর হবে)।
9. যদি আপনার স্ক্রিপ্টটি ঠিক কখন এক্সিকিশন শুরু করেছে জানতে চান, তাহলে $_SERVER[’REQUEST_TIME’] ব্যবহার করুন time() নয়।
10. যদি সম্ভব হয় তবে, strncasecmp, strpbrk এবং stripos প্রভৃতি ব্যবহার করুন regex এর বদলে। কারণ রেগুলার এক্সপ্রেশন এর এক্সিকিউশন মন্থর।
11. str_replace ফাংশনটি preg_replace এর চাইতেও দ্রুততর, কিন্তু strtr ফাংশনটি str_replace এর তুলনায়ও ৪গুণ দ্রুততর।
12. যদি কোনো ফাংশন যেমন স্ট্রিং রিপ্লেসমেন্ট ফাংশন অ্যারে এবং সিঙ্গল ক্যারেক্টার উভয়ই আরগুমেন্ট হিসেবে নেয়, আর আপনার আরগুমেন্ট লিস্ট যদি খুব বড়া না হয়। তাহলে হাতেই লিখেদিন কয়েকটি রিপ্লেসমেন্ট স্টেটমেন্ট(এক লাইনেই অ্যারেতে পুরো আরগুমেন্ট পাস করার বদলে), যাতে একটি একটি করে ক্যারেক্টার পাস করবেন।
13. যেখানেই সম্ভব if, else if এর জঙ্গলের চেয়ে switch-case ব্যবহার করুন। পিএইচপি ৬ এ goto স্টেটমেন্টটিও ফিরে আসছে!
14. Error suppression অপারেটর @ ব্যবহার করলে স্ক্রীপ্ট অনেক মন্থর চলবে। তাই যখন-তখন এটি ব্যবহার করবেন না। এমনকি ডিবাগিংও করা কঠিন হয়ে যায় এটি ব্যবহারে।
15. অ্যাপাচি'র mod_deflate অন করে দিন।
16. ডাটাবেজ কানেকশন নিয়ে কাজ করা হয়ে গেলেই তা ক্লোজ করে দিন।
17. $row[’id’] এভাবে লিখলে তা $row[id] এর চেয়ে ৭ গুণ দ্রুততর হবে। কারণ '' দিয়ে আগেই বলে দেয়া হচ্ছে কি করতে হবে, '' না দিলে গরু খোঁজা শেষ করে তারপর কাজ করে। :)
18. Error messages are expensive টেস্টিং এর সময় এরর মেসেজ রাখুন, প্রোডাকশনে এরর বাদ।
19. for লুপের ভেতরে ফাংশন ব্যবহার এড়িয়ে চলবেন, যেমন: for ($x=0; $x < count($array); $x) এখানে count() ফাংশনটি বারবার কল হবে। 4 নং পয়েন্ট দেখুন।
20. কোনো মেথডের লোকাল ভ্যারিয়েবলকে ইনক্রিমেন্ট করা অপেক্ষাকৃত দ্রুততর। যা কিনা কোনো ফাংশনের লোকাল ভ্যারিয়েবলকে কল করার মতোই সমগতির।

21. গ্লোবাল ভ্যারিয়েবল এর ইনক্রিমেন্ট একটি লোকাল ভ্যারিয়েবলের তুলনায় দ্বিগুণ মন্থর।
22. কোনো অবজেক্ট প্রোপার্টি'র ইনক্রিমেন্ট (যেমন $this->prop++) লোকাল ভ্যারিয়েবল ইক্রিমেন্ট থেকেও ৩গুন মন্থর।
23. ইনিশিয়ালাইজ না করা কোনো লোকাল ভ্যারিয়েবলের ইনক্রিমেন্ট ইনিশিয়ালাইজ করাটি তুলনায় ৯-১০গুণ মন্থর হবে।
24. কোনো গ্লোবাল ভ্যারিয়েবল ডিক্লেয়ার করলেন কিন্তু তার ব্যবহার করেননি, তবুও এটা এক্সিকিউশনকে মন্থর করে দেবে (মন্থরতার পরিমান কোনো লোকাল ভ্যারিয়েবলকে ইনক্রিমেন্ট করানোর সমান). PHP খুব সম্ভব এ সময় খুঁজে দেখে এই নামে কোনো গ্লোবাল ভ্যারিয়েবল আছে কিনা আগেই।
25. মেথড ইনভোক করলে তা ক্লাসের ভেতর কতগুলো মেথড রয়েছে তার উপর নির্ভরশীল নয়। পরীক্ষায় দেখা গেছে, একটি টেস্ট ক্লাসের কোনো মেথডের পূর্বে বা পরে ১০টি এক্সট্রা মেথড যোগ করেও পারফর্মেন্সের হেরফের পাওয়া যায়নি(এটি সরাসরি কোনো কাজে লাগবে বলে মনে হচ্ছেনা ;))।
26. ডিরাইভড ক্লাসের মেথডগুলো বেজ ক্লাসের মেথডগুলোর চেয়েও দ্রুত কাজ করে।
27. যদি এমন একটি ফাংশন কল করা হয় যার একটি প্যারামিটার আছে তবে ফাংশনের বডিতে কোনো কোড নেই, তবে তাও কিন্তু ৭/৮টি $localvar++ অপারেশনের সমান! আর তা যদি ফাংশ না হয়ে মেথড হয় তবে তা প্রায় ১৫টি $localvar++ অপারেশনের সমান!
28. আপনার স্ট্রিং গুলোকে ' দিয়ে কোট করুন " দিয়ে নয়, এতে এক্সিকিউশন কিঞ্চিত হইলেও দ্রুততর হবে, কারণ পিএইচপি "..." এর ভেতরে ভ্যারিয়েবল খুঁজে বেড়ায়। কিন্তু '...' এর ভেতরে খোঁজে না। অবশ্য যদি ভ্যরিয়েবল রাখতে চান তবে "..." এর ভেতরেই ব্যবহার করতে হবে।
29. স্ট্রীং ইকো করার সময় ডট এর বদলে কমা দিয়ে সেগুলো পৃথক করলে তা দ্রুততর হবে। তবে মনে রাখবেন এটি ইকো'র বেলায়ই খাটে কেননা কমা দিয়ে আসলে একাধিক প্যারামিটার নিচ্ছে সে। ২নং পয়েন্টেই এই কথা বলা আছে আবার এইখানে বললো কেনু? :X
30. কোনো PHP স্ক্রীপ্ট কোনো HTML পেজের চেয়ে কম করেও ২থেকে ১০ গুণ মন্থরতায় রান করবে অ্যাপাচিতে। তাই HTML বেশি ব্যবহার করে স্ক্রীপ্টের ব্যবহার সীমিত রাখুন। মানে মাথাব্যথা করলে মাথা কেটে ফেলুন। :P
31. আপনার পিএইচপি কোড বারবার রিকম্পাইল হবে যদি না তা ক্যাশিং করা থাকে। কোনো ক্যাশিং সফটওয়্যার কাজে লাগান আপনার সার্ভারে তা ২৫ থেকে ১০০% পর্যন্ত বেশি দ্রুততা নিশ্চিত করতে পারে। বড় কোনো সাইট করতে গেলে এসব অবশ্যই খেয়াল করা দরকার।
32. যতো ক্যাশ করা যায় করুন। memcached ব্যবহার করুন। মেমক্যাশড একটি হাই পারফর্ম্যান্স মেমোরি অবজেক্ট ক্যাশিং সিস্টেম। এটি ডাটাবেজ লোড কমিয়ে ডাইনামিক ওয়েব অ্যাপ্লিকেশনের কার্যকারিতা বৃদ্ধিতে সহায়ক। অপকোড ক্যাশ করাও জরুরী, তাহলে আপনার পিএইচপি কোডকে বার বার কম্পাইল করতে হচ্ছেনা।
33. যখন কোনো স্ট্রিং নিয়ে কাজ করছেন তখন আপনি যদি এর লেংথ চেক করতে চান, নিশ্চয়ই প্রথমে মনে আসবে strlen() ফাংশনটির কথা। ফাংশনটি বেশ দ্রুত কাজ করে কারণ এটির অপারেশনে কোনো ক্যালকুলেশন থাকেনা, বরং অলরেডি জানা লেংথটিই রিটার্ন করে zval নামক স্ট্রাকচার থেকে(এটি অভ্যন্তরীন সি স্টাক্ট যার মধ্যে পিএইচপি'র ভ্যারিয়েবলগুলো থাকে)। তবে যেহেতু strlen() একটি ফাংশন তাই এটি কিছুটা হলেও মন্থর, কারণ এটি আরো কয়েকটি ফাংশন কলের উপর নির্ভরশীল যেমন lowercase বা hashtable lookup ইত্যাদি। আপনি কিছু কিছু ক্ষেত্রে এটাকে অপটিমাইজ করে নিতে পারেন isset() কনস্ট্রাক্ট ব্যবহার করে দেখুন:

Ex. if (strlen($foo) < 5) { echo "Foo is too short"; } vs. if (!isset($foo[5])) { echo "Foo is too short"; } খুবই মজার ব্যাপার!

কনস্ট্রাক্ট হওয়াতে isset() দ্রুত রান করে কারণ এতে ফাংশন লুকআপ তো নেই'ই লোয়ারকেস বা হ্যাশটেবলও দেখতে হচ্ছেনা। এধরণের চালাকি ঠিকমতো কাজে লাগাতে পারলে বেশ মজা পাবেন নি:সন্দেহে।

34. ভ্যারিয়েবলের মান কমানো বাড়ানোর সময় $i++ সবসময়ই ++$i থেকে মন্থরতর। এটা সম্পর্কে বলা হয়েছে এটা পুরোটাই PHP নির্ভর তাই আপনার C বা Java কোডেও এই বুদ্ধি কাজে লাগাতে গেলে তেমন ফায়দা হবেনা(আগে সিতে এই অপটিমাইজেশনের কথা বলা হতো এখন কম্পাইলারেই অপটিমাইজড হবে হয়তো)। ++$i এটি PHPতে দ্রুততর কারণ $i++ এ ৪টি অপকোড ব্যবহৃত হয়েছে কিন্তু প্রি-ইনক্রিমেন্টে মাত্র ৩টি। সবারই জানা আছে পোস্ট ইনক্রিমেন্ট একটি টেম্পোরারি ভ্যারিয়েবল তৈরি করে এরপর তা ইনক্রিমেন্ট করে। কিন্তু প্রি-ইনক্রিমেন্ট মানটি সরাসরি ইনক্রিমেন্ট করে। Zend এর পিএইচপি অপটিমাইজারও এধরণের অপকোড অপটিমাইজ করে। তবুও এধরণের প্রাকটিস রাখা ভালো কেননা অনেক হোস্টিংয়েই কিন্তু অপকোড অপটিমাইজার ব্যবহার করা হয়না।
35. সবকিছুকেই OOP করতে হবে এমন কথা নেই, অনেক বেশি ওভারহেড তৈরি করে এবং প্রতিটি মেথড এবং অবজেক্ট কল করা হলে অনেক মেমোরি দখল হয়ে যায়। সবসময়ই ঢাল, সড়কি লাগবে না, প্রয়োজনে একটি চড়ই যথেষ্ট। ;)
36. সবধরণের ডাটা স্ট্রাকচারকেই class এ পরিণত করতে হবে এমন কোনো বাধ্যবাধকতা নেই arrayও কিন্তু অনেক কাজের।
37. মেথডকে অযথাই অনেকগুলো স্প্লিট করে করার দরকার নেই। আগেই ভেবে নিন ঠিক কোন কোডগুলো বারবার আপনার ব্যবহার করার প্রয়োজন হবে।
38. যদি দেখেন যে মেথডের কোনো বিশেষ অংশ আলাদা করা দরকার, রি-ফ্যাক্টরিং এর সময় তা পরেও করতে পারবেন।
39. অসংখ্য প্রিডিফাইনড ফাংশন আছে পিএইচপিতে সেগুলোর ব্যবহারে প্রাধাণ্য দিন। অনেক সময়ই সেগুলোর ব্যবহারই অনেকে জানেন না, এগুলো নিজের লেখা ফাংশনের চেয়ে দ্রুত রান করার সম্ভাবনা বেশি।
40. এটা অ্যাডভান্সড লেভেলের জন্য। আপনার কোনো ফাংশন যদি অনেক সময় সাপেক্ষ এক্সিকিউট করে তবে তা C এক্সটেনশন(PECL) হিসেবে তৈরি করে নিতে পারেন।
41. কোড প্রোফাইলিং করুন। প্রোফাইলারের মাধ্যমে আপনি জানতে পারবেন কোন কোড বেশি রান হচ্ছে, কোন অংশ বেশি সময় নিচ্ছে ইত্যাদি। সুতরাং সেইভাবে অপটিমাইজ করতে পারবেন। Xdebug এর একটি প্রোফাইলার আছে। আরো নতুন নতুন কি কি বের হচ্ছে খোঁজ রাখুন।
42. mod_gzip নামে একটি অ্যাপাচি মডিউল আছে। যা আপনার ডাটাকে অন দ্য ফ্লাই কম্প্রেস/সংকোচন করতে পারে এবং ডাটা ট্রান্সফার প্রায় ৮০% কমিয়ে দিতে সক্ষম।
43. এই ছোট আর্টিকেলটিও চোখ বুলিয়ে নিতে পারেন John Lim এর পিএইচপি অপটিমাইজেশন'এর উপর লেখা।


এই আর্টিকেলটি ২০টির'ও বেশি ভাষায় অনূদিত। আর কিছুক্ষণ আগে এটি বাংলায়ও অনূদিত হলো এই অধমের দ্বারা

আর্টিকেলটি ক্রিয়েটিভ কমনস লাইসেন্সের অধীনে প্রকাশিত। কোথাও এর কোনো অংশ ব্যবহার করলে মূল সূত্রগুলো উল্লেখ বাধ্যতামূলক।
সর্বশেষ এডিট : ০৮ ই জানুয়ারি, ২০১২ রাত ১:১৭
৩৬টি মন্তব্য ৩৭টি উত্তর

আপনার মন্তব্য লিখুন

ছবি সংযুক্ত করতে এখানে ড্রাগ করে আনুন অথবা কম্পিউটারের নির্ধারিত স্থান থেকে সংযুক্ত করুন (সর্বোচ্চ ইমেজ সাইজঃ ১০ মেগাবাইট)
Shore O Shore A Hrosho I Dirgho I Hrosho U Dirgho U Ri E OI O OU Ka Kha Ga Gha Uma Cha Chha Ja Jha Yon To TTho Do Dho MurdhonNo TTo Tho DDo DDho No Po Fo Bo Vo Mo Ontoshto Zo Ro Lo Talobyo Sho Murdhonyo So Dontyo So Ho Zukto Kho Doye Bindu Ro Dhoye Bindu Ro Ontosthyo Yo Khondo Tto Uniswor Bisworgo Chondro Bindu A Kar E Kar O Kar Hrosho I Kar Dirgho I Kar Hrosho U Kar Dirgho U Kar Ou Kar Oi Kar Joiner Ro Fola Zo Fola Ref Ri Kar Hoshonto Doi Bo Dari SpaceBar
এই পোস্টটি শেয়ার করতে চাইলে :
আলোচিত ব্লগ

বিশ্বাসীকে লজিকের কথা বলার দরকার কি?

লিখেছেন মহাজাগতিক চিন্তা, ১৮ ই মার্চ, ২০২৪ দুপুর ২:১৭




হনুমান দেবতা এবং বোরাকে কি লজিক আছে? ধর্ম প্রচারক বলেছেন, বিশ্বাসী বিশ্বাস করেছেন ঘটনা এ পর্যন্ত। তাহলে সবাই অবিশ্বাসী হচ্ছে না কেন? কারণ অবিশ্বাসী বিশ্বাস করার মত কিছু... ...বাকিটুকু পড়ুন

আমাদের শাহেদ জামাল- ৭১

লিখেছেন রাজীব নুর, ১৮ ই মার্চ, ২০২৪ দুপুর ২:৫৪



শাহেদ জামাল আমার বন্ধু।
খুব ভালো বন্ধু। কাছের বন্ধু। আমরা একসাথেই স্কুল আর কলেজে লেখাপড়া করেছি। ঢাকা শহরে শাহেদের মতো সহজ সরল ভালো ছেলে আর একটা খুজে... ...বাকিটুকু পড়ুন

ভাবছিলাম ২ লক্ষ ব্লগ হিট উপলক্ষে ব্লগে একটু ফান করব আড্ডা দিব, কিন্তু এক কুৎসিত অপব্লগার সেটা হতে দিলোনা।

লিখেছেন মোহাম্মদ গোফরান, ১৮ ই মার্চ, ২০২৪ রাত ৮:০৫



এটি ব্লগে আমার ২৬০ তম পোস্ট। এবং আজকে আমার ব্লগের মোট হিট ২০০০০০ পূর্ণ হয়েছে। আমি আনন্দিত।এই ছোট ছোট বিষয় গুলো সেলিব্রেট করা হয়তো ছেলে মানুষী। কিন্তু... ...বাকিটুকু পড়ুন

শয়তান বন্দি থাকলে শয়তানি করে কে?

লিখেছেন সাখাওয়াত হোসেন বাবন, ১৮ ই মার্চ, ২০২৪ রাত ১০:২০



রমজানে নাকি শয়তানকে বেধে রাখা হয়,তাহলে শয়তানি করে কে?

বহুদিন পর পর ব্লগে আসি এটা এখন অভ্যাসে পরিনত হয়েছে। বেশ কিছু বয়স্ক, মুরুব্বি, সম বয়সি,অল্প বয়সি একটিভ কিছু ব্লগার... ...বাকিটুকু পড়ুন

বয়কট বাঙালি

লিখেছেন অপু তানভীর, ১৯ শে মার্চ, ২০২৪ রাত ১২:২৪



কদিন পরপরই আমাদের দেশে বয়কটের ঢল নামে । অবশ্য তাতে খুব একটা কাজ হয় না । বাঙালির জোশ বেশি দিন থাকে না । কোন কিছু নিয়েই বাঙালি কখনই একমত... ...বাকিটুকু পড়ুন

×