PHP কিভাবে কাজ করে?
PHP কি?
PHP হল একটি বহুল ব্যবহৃত ওপেনসোর্স জেনারেল পারপাস প্রোগ্রামিং ল্যাংগুয়েজ। এটাকে প্রধানত ওয়েব ভিত্তিক সফটওয়্যার বা এপ অথবা ওয়েবসাইট তৈরির ব্যাকএন্ড ল্যাংগুয়েজ হিসেবে ব্যবহার করা হয়। PHP কে ডেডিকেটেড PHP ফাইলে লেখা যায় আবার সাধারন HTML কোডের ভিতর এমবেড করেও লেখা যায়। একারনে একে স্ক্রিপ্টিং ল্যাংগুয়েজ ও বলা হয়।
PHP ইঞ্জিন কিভাবে কাজ করে?
আমরা যখন PHP কোড লিখি তখন সার্ভারে PHP কোডটাকে প্রোসেস করে আউটপুট HTML আকারে দেখতে পাই। এই কাজটা করার জন্য আমাদের লেখা PHP কোডটাকে PHP ইঞ্জিন কয়েকটা ধাপে প্রোসেস করে। ধাপগুলো হল –
- টোকেনাইজিং
- পার্সিং
- কম্পাইলিং
- এক্সিকিউশন
টোকেনাইজিং
PHP তে আমরা যে কোড লিখি সেই কোডের ভিতর অসংখ্য বিল্টইন কিওয়ার্ড ব্যবহার করি। যেমন, echo, print, function, if, while ইত্যাদি। আবার অনেক কিওয়ার্ড ব্যবহার করি যেগুলো বিল্ট ইন না। এসবই একেকটা টোকেন। টোকেনাইজিং এর ধাপে এই প্রত্যেকটা টোকেনকে আলাদা আলাদা করে আইডেন্টিফাই করা হয়
পার্সিং
টোকেনাইজিং ধাপ পার করে সিনট্যাক্স চেক করা হয়। PHP এর স্ট্যান্ডার্ড অনুযায়ী কোড লেখা হইছে কিনা। এরপর টোকেগুলোকে Abstract Syntax Tree (AST) তে সাজানো হয়।
কম্পাইলিং
এ ধাপে পার্সিং করা Abstract Syntax Tree (AST) এর প্রতিটা নোডকে একে একে লো-লেভেল Zend OpCode বা জেন্ড অপারেশন কোডে কনভার্ট করা হয়। Zend Engine (ZE) VM এই অপারেশন কোডকে পড়তে পারে। এবং প্রোসেস করতে পারে। আমরা আমাদের কোডের ভিতর যেসব টোকেন লিখি তার প্রতোকটাকে Zend VM প্রোসেস করে আউটপুট তৈরি করে কনসোল শো করে অথবা HTML আকারো ব্রাউজারে সেন্ড করে।
পারফর্ম্যান্স অপ্টিমাইজেশন
প্রতিবার সার্ভারে PHP কোড প্রোসেসের রিকোয়েস্ট আসলে এই চারটা ধাপ পার করে তারপর আমরা আউটপুট পাই। এখন এখানে সমস্যা হল প্রতিবারই PHP কোডকে প্রথম থেকে এভাবে ধাপে ধাপে প্রোসেস করতে গেলে অনেক সময় এবং রিসোর্স খরচ হয়। এটা অনেক বেশি CPU ব্যবহার করে, মেমরি দখল করে এবং সর্বোপরি পারফর্ম্যান্স লো হয়ে যায়। রিসোর্সের এই অপচয় কমাতে OPCache ব্যবহার করা হয়।
OPCache কি?
PHP এর একটি বিল্ট ইন ক্যাশিং ইঞ্জিন হল OPCache।
OPCache যেটা করে তা হল, একটা PHP কোড যখন প্রোসেসিং এর ধাপগুলো একবার পার করে ফেলে তখন সেটাকে বাইটকোডে কনভার্ট করে মেমোরিতে সেভ করে রাখে। এরপর যখনি একই কোড প্রোসেসিং এর রিকোয়েস্ট আসে তখন সে আবার নতুন করে প্রোসেসিং শুরু না করে আগের করে রাখা বাইটকোড থেকেই আউটপুট প্রদান করে। এক্ষেত্রে OPCache আগে চেক করে নেয় যে PHP কোডটা কি আগের মতই আছে নাকি চেঞ্জ হইছে। যদি সে কোন চেঞ্জ ডিটেক্ট করে তাহলে আবার প্রথম থেকে প্রোসেসিং এর ধাপগুলো পার করে এবং আগের বাইটকোডকে ইরেজ করে নতুন বাইটকোড সেভ করে রাখে ফিউচারের জন্য।
এভাবে OPCache আমাদের PHP কোডের পারফর্ম্যান্সকে বাড়িয়ে দেয় কয়েকগুন।