PhantomJS একটি হেডলেস ব্রাউজার (headless browser) যা মূলত WebKit রেন্ডারিং ইঞ্জিনের উপর ভিত্তি করে তৈরি। এটি স্ক্রিপ্টিং, সিএসএস, জাভাস্ক্রিপ্ট, DOM, সেশন স্টোরেজ ইত্যাদি সহ একটি পূর্ণাঙ্গ ওয়েব পেজ ব্রাউজিং অভিজ্ঞতা প্রদান করে, তবে এটি কোন UI প্রদর্শন করে না। এর ফলে, এটি খুব দ্রুত এবং automation ও testing এর জন্য উপযোগী।
একটি জনপ্রিয় ব্যবহার ক্ষেত্র হলো page performance optimization। PhantomJS ওয়েব পেজের পারফরম্যান্স ট্র্যাক এবং অপ্টিমাইজ করতে সাহায্য করে।
PhantomJS দিয়ে পেজ পারফরমেন্স অপ্টিমাইজেশন
PhantomJS আপনার পেজের পারফরম্যান্স পরিমাপ করার জন্য বিভিন্ন সরঞ্জাম সরবরাহ করে, যেমন load time পরিমাপ, resource usage নিরীক্ষণ, এবং network requests এর বিশ্লেষণ।
এখানে PhantomJS ব্যবহার করে পেজের পারফরম্যান্স অপ্টিমাইজেশন এবং বিশ্লেষণের কিছু প্রধান পদ্ধতি আলোচনা করা হয়েছে।
1. Performance Measurement with PhantomJS
PhantomJS দিয়ে আপনি পেজের load time এবং network resources বিশ্লেষণ করতে পারেন। এটি সঠিকভাবে পেজের request-response cycle এবং কনটেন্ট লোড করার গতি নির্ধারণ করতে সাহায্য করে।
PhantomJS দিয়ে পেজ লোড টাইম পরিমাপ করা:
var page = require('webpage').create();
page.open('http://example.com', function(status) {
if (status !== 'success') {
console.log('Unable to load the page');
phantom.exit();
} else {
var loadTime = page.evaluate(function() {
return window.performance.timing.loadEventEnd - window.performance.timing.navigationStart;
});
console.log('Page Load Time: ' + loadTime + 'ms');
phantom.exit();
}
});
Explanation:
- এই কোডে, PhantomJS একটি পেজ খুলে এবং পেজের লোড টাইম পরিমাপ করে, যা Performance API (ব্রাউজারে উপলব্ধ) ব্যবহার করে পাওয়া যায়। এটি পেজের navigationStart থেকে loadEventEnd এর মধ্যে সময় পরিমাপ করে।
2. Performance Metrics Using window.performance
PhantomJS দিয়ে আপনি window.performance API ব্যবহার করে পেজের বিভিন্ন পারফরম্যান্স মেট্রিক্স বের করতে পারেন, যেমন navigation timing, resource timing, paint timing, ইত্যাদি। এর মাধ্যমে আপনি বুঝতে পারবেন পেজটি কত দ্রুত লোড হচ্ছে এবং কোথায় উন্নতি সম্ভব।
var page = require('webpage').create();
page.open('http://example.com', function(status) {
if (status !== 'success') {
console.log('Unable to load the page');
phantom.exit();
} else {
var timings = page.evaluate(function() {
var performance = window.performance || window.mozPerformance || window.webkitPerformance || window.msPerformance || {};
return performance.timing;
});
console.log('Navigation Start: ' + timings.navigationStart);
console.log('Page Load End: ' + timings.loadEventEnd);
phantom.exit();
}
});
Explanation:
- window.performance.timing থেকে পাওয়া বিভিন্ন পরামিতি, যেমন navigationStart, domLoading, domContentLoadedEventEnd ইত্যাদি, পেজের পারফরম্যান্স পরিমাপ করতে সাহায্য করে।
3. Network Performance Monitoring
PhantomJS ব্যবহার করে আপনি পেজের লোড হওয়া সমস্ত রিসোর্স, যেমন CSS, JavaScript, images, এবং AJAX requests ট্র্যাক করতে পারেন। এটি নিশ্চিত করতে সাহায্য করবে যে কোনো নির্দিষ্ট রিসোর্স পেজ লোড করতে সমস্যা সৃষ্টি করছে কিনা।
var page = require('webpage').create();
page.onResourceRequested = function(requestData, networkRequest) {
console.log('Requesting: ' + requestData.url);
};
page.onResourceReceived = function(response) {
console.log('Received: ' + response.url + ' - ' + response.status);
};
page.open('http://example.com', function(status) {
console.log('Page Loaded');
phantom.exit();
});
Explanation:
- এই কোডে PhantomJS পেজের লোড হওয়া সব রিসোর্সের request এবং response গুলি ট্র্যাক করে, যাতে আপনি দেখুন কোন রিসোর্সটি লোড হতে সময় নিচ্ছে।
4. Analyzing Resource Requests and Optimizing Assets
PhantomJS দিয়ে আপনি সমস্ত HTTP requests বিশ্লেষণ করতে পারেন এবং বুঝতে পারেন কোন রিসোর্স পেজের লোডিং সময়ের জন্য দায়ী। এর মাধ্যমে আপনি রিসোর্সগুলি অপ্টিমাইজ করতে পারেন (যেমন ইমেজ কম্প্রেশন, JavaScript বা CSS ফাইল মিনিফিকেশন ইত্যাদি)।
var page = require('webpage').create();
page.onResourceReceived = function(response) {
console.log(response.url + ' - Status: ' + response.status);
if (response.status >= 400) {
console.log('Error: ' + response.url + ' failed to load');
}
};
page.open('http://example.com', function(status) {
if (status === "success") {
console.log('Page loaded successfully');
}
phantom.exit();
});
Explanation:
- এই স্ক্রিপ্টটি আপনার পেজের সমস্ত resource গুলি মনিটর করবে এবং যেগুলি সঠিকভাবে লোড হচ্ছে না, সেগুলি চিহ্নিত করবে।
5. Checking Render Times and Optimizing Layout
PhantomJS আপনাকে পেজের render times ট্র্যাক করতে এবং UI সিঙ্ক্রোনাইজেশন বিষয়ে তথ্য দিতে সাহায্য করতে পারে, যা পারফরম্যান্স অপ্টিমাইজেশনে গুরুত্বপূর্ণ। আপনি পেজের rendering performance এবং JavaScript execution time নিরীক্ষণ করতে পারেন।
var page = require('webpage').create();
page.onLoadFinished = function(status) {
console.log('Load Finished');
page.evaluate(function() {
console.log('Total Render Time: ' + window.performance.now() + 'ms');
});
phantom.exit();
};
page.open('http://example.com');
Explanation:
window.performance.now()ফাংশনটি ব্রাউজারে লোড বা রেন্ডারিং এর exact timing পরিমাপ করে।
6. Optimizing Resource Loading
PhantomJS ব্যবহার করে আপনি resource prioritization করতে পারেন, যেমন JavaScript ফাইলগুলি সিঙ্ক্রোনাসভাবে না লোড করে অ্যাসিঙ্ক্রোনাসভাবে লোড করানো বা CSS/JS ফাইলগুলি minify করা, যা পেজের লোড টাইম দ্রুত করতে সহায়তা করবে।
Optimizing Resource Loading Example:
var page = require('webpage').create();
page.onResourceReceived = function(response) {
if (response.url.indexOf('.css') !== -1 || response.url.indexOf('.js') !== -1) {
console.log('Minifying ' + response.url);
// Add resource optimization logic like minification or async loading here
}
};
page.open('http://example.com', function(status) {
phantom.exit();
});
Explanation:
- এই স্ক্রিপ্টটি CSS বা JavaScript ফাইলের লোডিং ট্র্যাক করবে এবং সেগুলিকে minify বা async লোড করার জন্য সেগুলিকে অপ্টিমাইজ করতে সাহায্য করবে।
7. Performance Optimization Recommendations:
- Lazy Loading: আপনি lazy loading ব্যবহার করতে পারেন যাতে শুধুমাত্র স্ক্রিনে দেখা হওয়া উপাদানগুলিই লোড হয়।
- Minify Resources: সব স্ট্যাটিক ফাইল, যেমন CSS এবং JavaScript ফাইল মিনিফাই করুন।
- Image Optimization: ইমেজগুলির সাইজ কমান এবং WebP বা JPEG-2000 এর মতো নতুন ফর্ম্যাট ব্যবহার করুন।
- Use CDNs: ভারী রিসোর্সের জন্য Content Delivery Network (CDN) ব্যবহার করুন, যা লোডিং টাইম কমাতে সাহায্য করবে।
- Critical CSS: আপনার পেজে গুরুত্বপূর্ণ CSS প্রথমে লোড করুন, অন্যগুলো পরবর্তী সময়ে।
PhantomJS একটি শক্তিশালী টুল যা আপনার ওয়েব পেজের পারফরম্যান্স ট্র্যাক এবং অপ্টিমাইজ করার জন্য বিভিন্ন সুযোগ প্রদান করে। Page load time, network resource performance, render times, এবং resource usage নিরীক্ষণ করার মাধ্যমে আপনি আপনার ওয়েবসাইটের পারফরম্যান্স অপ্টিমাইজ করতে পারেন। PhantomJS এর সাহায্যে আপনি সহজেই ওয়েব পেজের দ্রুত লোডিং এবং আরও কার্যকরী পারফরম্যান্স পেতে পারেন।
PhantomJS হল একটি হেডলেস ব্রাউজার, যা WebKit এর উপর ভিত্তি করে তৈরি এবং এটি কমান্ড লাইনের মাধ্যমে কাজ করে। এটি মূলত JavaScript API ব্যবহার করে ব্রাউজার রেন্ডারিং এবং স্ক্রিপ্টিংয়ের কাজ সম্পাদন করতে পারে। PhantomJS ব্যবহার করে আপনি web page লোডিং, স্ক্রিনশট গ্রহণ, এবং পারফরম্যান্স মেট্রিকস মনিটর করতে পারবেন, এবং এটি বেশ কার্যকরী একটি টুল ওয়েব স্ক্র্যাপিং, অটোমেশন এবং টেস্টিংয়ের জন্য।
PhantomJS দিয়ে পেজ লোডিং টাইম এবং পারফরম্যান্স মনিটর করা
PhantomJS এর মাধ্যমে আপনি web page লোডিং টাইম এবং পারফরম্যান্স ট্র্যাক করতে পারেন, যা ওয়েবসাইটের স্পিড এবং পারফরম্যান্স বিশ্লেষণের জন্য ব্যবহৃত হয়। এতে JavaScript API ব্যবহার করে পেজ লোড হওয়ার সময় মাপা সম্ভব, এছাড়া রিসোর্স লোডিংও ট্র্যাক করা যেতে পারে।
PhantomJS এর মাধ্যমে পেজ লোডিং টাইম এবং পারফরম্যান্স মনিটর করা:
1. PhantomJS স্ক্রিপ্টে পেজ লোডিং টাইম ট্র্যাক করা:
প্রথমে, PhantomJS ইনস্টল করুন যদি আপনার সিস্টেমে এটি ইনস্টল না থাকে:
npm install -g phantomjs
এরপর, আপনি PhantomJS এর সাহায্যে পেজ লোডিং টাইম ট্র্যাক করার জন্য একটি স্ক্রিপ্ট তৈরি করতে পারেন।
Example Script: Track Page Load Time
var page = require('webpage').create();
var startTime = Date.now(); // Track the start time
page.open('http://example.com', function(status) {
var endTime = Date.now(); // Track the end time
var loadTime = endTime - startTime; // Calculate load time
console.log('Page loaded in: ' + loadTime + ' ms'); // Log the load time
phantom.exit();
});
Explanation:
- startTime: পেজ লোড করার শুরু সময়।
- endTime: পেজ লোড করার পর সময়।
- loadTime: পেজ লোড হওয়ার সময়ের পার্থক্য (মিলিসেকেন্ডে)।
- page.open: পেজটি লোড করতে ব্যবহৃত হয় এবং এটি লোড হওয়া শেষ হলে একটি callback ফাংশন রান হয়।
Run the Script:
এই স্ক্রিপ্টটিকে PhantomJS দিয়ে রান করতে পারেন:
phantomjs loadtime.js
এটি কনসোলে পেজ লোড টাইম প্রদর্শন করবে।
2. PhantomJS দিয়ে সম্পূর্ণ ওয়েবপেজের পারফরম্যান্স ট্র্যাক করা:
আপনি PhantomJS ব্যবহার করে ওয়েবপেজের সম্পূর্ণ পারফরম্যান্স যেমন HTTP requests, resource loading, JavaScript execution time, ইত্যাদি ট্র্যাক করতে পারেন।
Example Script: Performance Monitoring
var page = require('webpage').create();
var performanceMetrics = [];
page.onResourceRequested = function(request) {
performanceMetrics.push({
url: request.url,
startTime: Date.now(),
});
};
page.onResourceReceived = function(response) {
var endTime = Date.now();
var metrics = performanceMetrics.find(function(item) {
return item.url === response.url;
});
if (metrics) {
metrics.endTime = endTime;
metrics.loadTime = endTime - metrics.startTime;
console.log('Resource: ' + response.url + ' loaded in ' + metrics.loadTime + ' ms');
}
};
page.open('http://example.com', function(status) {
console.log('Page loaded: ' + status);
phantom.exit();
});
Explanation:
- onResourceRequested: প্রতিটি HTTP রিকোয়েস্ট ট্র্যাক করে।
- onResourceReceived: প্রতিটি রেসপন্স গ্রহণ করার পর তার লোড টাইম নির্ধারণ করে।
- performanceMetrics: একটি অ্যারে যা ওয়েবপেজের সকল রিসোর্সের লোড টাইম সংরক্ষণ করবে।
Run the Performance Script:
phantomjs performance.js
এটি প্রতিটি রিসোর্সের লোড টাইম কনসোলে দেখাবে।
3. PhantomJS দিয়ে ওয়েবপেজ লোডিং এবং রিসোর্স লগিং:
আপনি ওয়েবপেজের রিসোর্সের কার্যকারিতা যেমন images, scripts, এবং stylesheets লোডিং টাইমও ট্র্যাক করতে পারেন।
Example Script: Log Resources Load Time
var page = require('webpage').create();
var resources = [];
page.onResourceReceived = function(response) {
if (response.stage === 'end') {
resources.push({
url: response.url,
type: response.type,
time: response.time
});
}
};
page.open('http://example.com', function(status) {
console.log('Page loaded with status: ' + status);
resources.forEach(function(resource) {
console.log('Resource: ' + resource.url + ' | Type: ' + resource.type + ' | Time: ' + resource.time + ' ms');
});
phantom.exit();
});
Explanation:
- onResourceReceived: রিসোর্সের শেষ স্টেজ (লোডিং সম্পন্ন) হওয়ার পরে রিসোর্সের URL, টাইপ এবং লোড টাইম লগ করা হয়।
- resources: একটি অ্যারে, যেখানে প্রতিটি রিসোর্সের তথ্য রাখা হবে।
Run the Resource Tracking Script:
phantomjs resources.js
এটি কনসোলে সমস্ত রিসোর্সের লোড টাইম এবং অন্যান্য তথ্য দেখাবে।
4. PhantomJS দিয়ে পেজ লোডের বিস্তারিত তথ্য:
ফুল পেজ লোডিং টাইম, JavaScript execution time, এবং অন্যান্য ডায়নামিক ডেটা ট্র্যাক করার জন্য আপনি PhantomJS স্ক্রিপ্ট ব্যবহার করতে পারেন।
Example Script: Monitor JavaScript Load Time
var page = require('webpage').create();
var startTime = Date.now();
page.onLoadFinished = function(status) {
var endTime = Date.now();
var loadTime = endTime - startTime;
console.log('Page fully loaded in: ' + loadTime + ' ms');
phantom.exit();
};
page.open('http://example.com', function(status) {
console.log('Page loading status: ' + status);
});
এটি পেজের পুরো লোড টাইম পরিমাপ করবে, যা JavaScript execution সহ সব কিছু অন্তর্ভুক্ত করবে।
PhantomJS একটি শক্তিশালী টুল যা ওয়েবপেজের performance, resource loading, এবং page load time মনিটর করতে ব্যবহার করা হয়। এর JavaScript API এর মাধ্যমে আপনি ওয়েবপেজের প্রতিটি রিসোর্স এবং তার লোড টাইম খুব সহজে ট্র্যাক করতে পারেন, যা আপনার ওয়েবসাইটের পারফরম্যান্স বিশ্লেষণের জন্য খুবই উপকারী। আপনি স্ক্রিপ্ট ব্যবহার করে ওয়েবপেজের লোডিং এবং পারফরম্যান্স সম্পর্কে বিস্তারিত তথ্য সংগ্রহ করতে পারেন এবং সেগুলি থেকে প্রয়োজনীয় সিদ্ধান্ত গ্রহণ করতে পারেন।
PhantomJS হল একটি headless browser (একটি ব্রাউজার যা UI ছাড়া রান করে) যা JavaScript চালানোর জন্য ব্যবহৃত হয়, এবং এটি সাধারণত ওয়েব পেজের স্ক্রিনশট নেওয়া, পেজ লোডিংয়ের সময় ট্র্যাক করা, সাইটের পারফরম্যান্স বিশ্লেষণ, ওয়েব স্ক্র্যাপিং, এবং অন্যান্য অটোমেশন কাজের জন্য ব্যবহৃত হয়। PhantomJS ব্যবহার করে আপনি ওয়েব পেজের রিসোর্স ব্যবহার এবং টাইমিং সম্পর্কিত তথ্য সংগ্রহ করতে পারেন।
PhantomJS দিয়ে Resource Usage এবং Timing Information সংগ্রহ করা
PhantomJS দিয়ে resource usage এবং timing information সংগ্রহ করার জন্য network, resource, এবং performance সম্পর্কিত বিভিন্ন তথ্য সংগ্রহের জন্য JavaScript কোড ব্যবহার করা হয়। আপনি ওয়েব পেজের লোডিং টাইম, রিসোর্সের সাইজ, এবং লোডিংয়ের স্ট্যাটাস জানতে পারবেন।
Steps to Collect Resource Usage and Timing Information in PhantomJS:
- PhantomJS ইনস্টলেশন:
- প্রথমে PhantomJS ইনস্টল করতে হবে। এটি আপনার কম্পিউটারে ইনস্টল করা না থাকলে, আপনি PhantomJS Official Website থেকে ডাউনলোড করে ইনস্টল করতে পারেন।
- PhantomJS স্ক্রিপ্ট লেখার জন্য Example:
- নীচে একটি উদাহরণ দেওয়া হয়েছে যেখানে PhantomJS ব্যবহার করে resource usage এবং timing information সংগ্রহ করা হয়েছে।
var page = require('webpage').create(); // Create a webpage object
// Set up a listener to collect resource usage data
page.onResourceReceived = function (response) {
if (response.status >= 400) {
console.log('Resource failed to load: ' + response.url + ' Status: ' + response.status);
}
else {
console.log('Resource loaded: ' + response.url + ' Status: ' + response.status);
console.log('Size of resource: ' + response.bodySize + ' bytes');
}
};
// Set up a listener to capture performance data (timing)
page.onLoadFinished = function(status) {
if (status === "success") {
page.evaluate(function() {
var timing = window.performance.timing;
console.log('Page load time (in ms): ' + (timing.loadEventEnd - timing.navigationStart));
console.log('DNS Lookup time (in ms): ' + (timing.domainLookupEnd - timing.domainLookupStart));
console.log('TCP Connection time (in ms): ' + (timing.connectEnd - timing.connectStart));
console.log('Page Rendering time (in ms): ' + (timing.loadEventEnd - timing.responseEnd));
});
}
else {
console.log("Page failed to load.");
}
phantom.exit();
};
// Open a webpage and gather timing and resource usage info
page.open('https://example.com', function(status) {
if (status === "success") {
console.log('Page loaded successfully!');
} else {
console.log('Page failed to load');
}
});
Explanation:
page.onResourceReceived: এটি ফাংশনটি ওয়েবপেজের বিভিন্ন রিসোর্স (যেমন স্ক্রিপ্ট, ইমেজ, স্টাইলশিট) লোড হওয়ার পর তা মনিটর করে। এই ফাংশনটি লোড হওয়া রিসোর্সের ইউআরএল, স্ট্যাটাস কোড, এবং সাইজ প্রদর্শন করে।page.onLoadFinished: এই ফাংশনটি পেজ লোড হওয়া শেষ হওয়ার পর performance timing (যেমন লোডিং টাইম, DNS lookup টাইম, TCP connection টাইম) সংগ্রহ করে এবং প্রদর্শন করে।- Performance Timing:
window.performance.timingAPI ব্যবহার করে পেজ লোডিংয়ের সময় এবং বিভিন্ন স্টেপের জন্য টাইমিং সংগ্রহ করা হয়। এতে আপনি page load time, DNS lookup time, TCP connection time, এবং rendering time সম্পর্কিত তথ্য পেতে পারেন।
Output Example:
Resource loaded: https://example.com/styles.css Status: 200
Size of resource: 3564 bytes
Resource loaded: https://example.com/script.js Status: 200
Size of resource: 1420 bytes
Page load time (in ms): 2100
DNS Lookup time (in ms): 20
TCP Connection time (in ms): 150
Page Rendering time (in ms): 950
PhantomJS কমান্ড রান করা:
- উপরের স্ক্রিপ্টটিকে
page.jsনাম দিয়ে সেভ করুন এবং PhantomJS দিয়ে এটি চালান:
phantomjs page.js
Key Data Collected:
- Resource Status: পেজ লোডিংয়ের সময় বিভিন্ন রিসোর্স (যেমন CSS, JS, ইমেজ) লোড হওয়ার স্ট্যাটাস এবং সাইজ জানানো হয়।
- Page Load Time: পুরো পেজ লোড হতে যে সময় প্রয়োজন হয়েছে তা (মিলিসেকেন্ডে) প্রদান করা হয়।
- DNS Lookup Time: DNS রেজোলিউশনের জন্য ব্যবহৃত সময়।
- TCP Connection Time: সার্ভারের সাথে TCP কানেকশন স্থাপনের জন্য ব্যবহৃত সময়।
- Rendering Time: পেজের উপাদান রেন্ডার করার জন্য সময়।
Additional Performance Metrics:
- আপনি আরও গভীরভাবে রিসোর্স টাইমিং এবং পারফরম্যান্স ডেটা সংগ্রহ করতে পারেন। এর জন্য Performance API অথবা resource timing API ব্যবহার করতে হবে। PhantomJS এই ডেটা সংগ্রহে সহায়তা করে।
PhantomJS হল একটি শক্তিশালী টুল যা আপনাকে resource usage এবং timing information সংগ্রহ করতে সাহায্য করে। এটি ওয়েবপেজের পারফরম্যান্স বিশ্লেষণ, স্ক্রিপ্টের সমস্যা চিহ্নিতকরণ, ওয়েব স্ক্র্যাপিং, এবং headless browsing এর জন্য একটি শক্তিশালী সমাধান প্রদান করে। PhantomJS-এ network requests এবং performance timing সম্পর্কিত তথ্য সংগ্রহ করার মাধ্যমে আপনি ওয়েব পেজের লোডিং পারফরম্যান্স বিশ্লেষণ করতে পারেন এবং অপ্টিমাইজেশন প্রয়োগ করতে পারেন।
PhantomJS একটি headless browser (গ্রাফিকাল ইউজার ইন্টারফেস ছাড়া ব্রাউজার) যা WebKit ইঞ্জিনের উপর ভিত্তি করে তৈরি। এটি মূলত JavaScript API ব্যবহার করে স্ক্রিপ্টিং এবং ওয়েব পেজের বিভিন্ন ধরনের টেস্টিং বা কার্যক্রম স্বয়ংক্রিয়ভাবে করার জন্য ব্যবহৃত হয়। PhantomJS ব্রাউজারের মত আচরণ করে কিন্তু এটি UI ছাড়া কাজ করে, যা এটিকে খুব দ্রুত এবং হালকা করে তোলে। এর মাধ্যমে আপনি পেজ স্ক্রিনশট, টেস্টিং, ওয়েব স্ক্র্যাপিং এবং আরও অনেক কিছু করতে পারেন।
এখানে আমরা দেখব কিভাবে PhantomJS ব্যবহার করে পেজ সাইজ কমানো এবং HTTP requests কমানো যায়।
1. PhantomJS দিয়ে পেজ সাইজ এবং HTTP Request কমানোর কৌশল
PhantomJS ব্যবহার করে আপনি বিভিন্ন optimization techniques প্রয়োগ করতে পারেন যা আপনার ওয়েব পেজের পারফরম্যান্স উন্নত করবে এবং HTTP requests কমাবে।
1.1. পেজ সাইজ কমানো (Reducing Page Size)
পেজ সাইজ কমানোর জন্য PhantomJS এর মাধ্যমে কিছু সাধারণ কৌশল প্রয়োগ করা যায়:
- Resources লোড বন্ধ করা: আপনি PhantomJS দিয়ে পেজে প্রয়োজনীয় রিসোর্স ছাড়া অন্য রিসোর্স যেমন ইমেজ, ফন্ট, CSS বা JavaScript লোড বন্ধ করতে পারেন।
- Lazy loading ব্যবহার করা: পেজের কিছু উপাদান কেবল তখনই লোড করুন যখন সেগুলি স্ক্রিনে আসে।
PhantomJS স্ক্রিপ্ট:
var page = require('webpage').create();
page.settings.loadImages = false; // Disable image loading
page.settings.userAgent = 'Mozilla/5.0'; // Set a custom user agent
page.open('http://example.com', function(status) {
if(status === "success") {
console.log("Page loaded successfully!");
page.render('screenshot.png'); // Save screenshot
}
phantom.exit();
});
Explanations:
page.settings.loadImages = false;: এখানে ইমেজ লোডিং বন্ধ করা হয়েছে। এটি আপনার পেজের সাইজ কমাতে সাহায্য করবে, কারণ অনেক ওয়েবসাইটে বড় আকারের ইমেজ থাকে যা পেজ লোডিং টাইম বাড়ায়।page.settings.userAgent: আপনি কাস্টম User-Agent সেট করতে পারেন, যা কিছু রিসোর্স লোড করতে সাহায্য করে বা বন্ধ করে দেয়।
এছাড়া, আপনি JavaScript বা CSS এর মাধ্যমে অনুরোধ করা কিছু ফাইল লোড করতে পারবেন বা বন্ধ করতে পারবেন, যেমন Google Fonts, তৃতীয় পক্ষের স্ক্রিপ্ট ইত্যাদি।
1.2. HTTP Requests কমানো (Reducing HTTP Requests)
PhantomJS ব্যবহার করে আপনি HTTP requests কমানোর জন্য কিছু কৌশল প্রয়োগ করতে পারেন:
- External Resources লোড বন্ধ করা: PhantomJS দিয়ে আপনি বাইরের JavaScript, CSS, এবং অন্যান্য রিসোর্স লোড বন্ধ করতে পারেন যা পেজ লোডের সময় অতিরিক্ত HTTP requests তৈরি করে।
- Inline Resources ব্যবহার করা: আপনি যদি স্ক্রিপ্ট বা স্টাইলশীট ফাইলগুলি ডাউনলোড না করতে চান, তবে সেগুলো ইনলাইন করে পেজের HTML ফাইলে যুক্ত করতে পারেন।
PhantomJS স্ক্রিপ্ট:
var page = require('webpage').create();
page.onResourceRequested = function(requestData, networkRequest) {
// Block requests for images, CSS, and JS files
if (requestData.url.match(/\.(jpg|jpeg|png|gif|css|js)$/i)) {
networkRequest.abort(); // Abort the request
}
};
page.open('http://example.com', function(status) {
if (status === "success") {
console.log("Page loaded successfully without images, CSS, or JS!");
page.render('screenshot.png'); // Save screenshot
}
phantom.exit();
});
Explanations:
onResourceRequested: এই ইভেন্টটি যখন কোনো রিসোর্স লোড করা হয় তখন ফায়ার হয়। এখানে আপনি abort() মেথড ব্যবহার করে ইমেজ, CSS, বা JavaScript রিসোর্স লোড করতে অস্বীকৃতি জানাতে পারেন।requestData.url.match(/\.(jpg|jpeg|png|gif|css|js)$/i): এখানে আমরা regular expression ব্যবহার করে image, CSS, এবং JS রিসোর্স ব্লক করছি।
এই স্ক্রিপ্টটি image, CSS, এবং JavaScript ফাইলগুলোর HTTP request কে abort করে দেয়, যার ফলে এই ফাইলগুলো লোড হওয়ার পর HTTP request কমানো হয় এবং পেজের সাইজ কমে যায়।
1.3. Performance Optimization:
PhantomJS ব্যবহার করে পেজের পারফরম্যান্স উন্নত করতে আরও কিছু টেকনিক প্রয়োগ করা যায়:
- JavaScript Execution Disable: আপনি PhantomJS-এ JavaScript কার্যকরী না করেও পেজের HTML এবং CSS স্টাইলগুলি দেখতে পারেন।
- Font and Image Optimization: ফন্ট এবং ইমেজ অপটিমাইজেশনের জন্য আপনি কম্প্রেসড ইমেজ এবং ওয়েব ফন্ট ব্যবহার করতে পারেন।
Disabling JavaScript:
var page = require('webpage').create();
page.settings.javascriptEnabled = false; // Disable JavaScript
page.open('http://example.com', function(status) {
if(status === "success") {
console.log("Page loaded successfully without JavaScript");
page.render('screenshot.png'); // Save screenshot
}
phantom.exit();
});
Explanation:
page.settings.javascriptEnabled = false;: এই লাইনটি JavaScript নিষ্ক্রিয় করে দেয়, যার ফলে কোনো JavaScript কোড পেজে রান করবে না। এর ফলে পেজ লোডের সময় কিছু স্ক্রিপ্টের কারণে হতে থাকা অতিরিক্ত HTTP requests বন্ধ হয়ে যাবে এবং লোড টাইম কমে যাবে।
PhantomJS ব্যবহার করে page size এবং HTTP requests কমানো সম্ভব। আপনি resource blocking, image loading disable, এবং JavaScript execution disable এর মতো কৌশল ব্যবহার করে পেজের পারফরম্যান্স এবং লোড টাইম উন্নত করতে পারেন। PhantomJS একধরনের headless browser হিসেবে খুব কার্যকরী, যেখানে আপনি কোড বা স্ক্রিপ্টের মাধ্যমে ওয়েব পেজের পারফরম্যান্স অপটিমাইজেশন করতে পারেন এবং ব্রাউজার ইন্টারফেস ছাড়াই কার্যক্রম পরিচালনা করতে পারেন।
PhantomJS একটি হেডলেস ব্রাউজার যা WebKit-এ ভিত্তি করে তৈরি এবং এটি স্ক্রিপ্টিং করার জন্য JavaScript ব্যবহার করে। এটি সাধারণত ওয়েব স্ক্র্যাপিং, ওয়েব অটোমেশন, টেস্টিং, এবং পারফরম্যান্স রিপোর্ট তৈরির জন্য ব্যবহৃত হয়। PhantomJS আপনার ওয়েব পেজের বিভিন্ন পারফরম্যান্স মেট্রিক্স বিশ্লেষণ করতে সহায়তা করে, এবং এই তথ্যগুলি performance reports আকারে তৈরি করতে পারে।
PhantomJS দিয়ে Performance Reports তৈরি করা
PhantomJS তে পারফরম্যান্স রিপোর্ট তৈরি করতে, আপনি JavaScript কোড ব্যবহার করে পেজ লোড, রেন্ডারিং, এবং অন্যান্য পারফরম্যান্স মেট্রিক্স ট্র্যাক করতে পারেন। এখানে কিভাবে PhantomJS ব্যবহার করে পারফরম্যান্স রিপোর্ট তৈরি করা যায়, তা নিয়ে বিস্তারিত আলোচনা করা হবে।
Step 1: PhantomJS ইনস্টল করা
প্রথমে, PhantomJS ইনস্টল করা প্রয়োজন। এটি Node.js এর সাথে কাজ করে, তাই আপনাকে PhantomJS এর npm প্যাকেজ ইনস্টল করতে হবে।
npm install -g phantomjs
Step 2: PhantomJS স্ক্রিপ্ট তৈরি করা
এখন আপনি একটি PhantomJS স্ক্রিপ্ট তৈরি করতে পারেন, যা ওয়েব পেজ লোড এবং পারফরম্যান্সের জন্য বিভিন্ন মেট্রিক্স সংগ্রহ করবে। নিচে একটি উদাহরণ দেয়া হলো:
var page = require('webpage').create(); // Create a new PhantomJS page
var system = require('system');
var t = Date.now(); // Capture the start time
page.open('http://example.com', function(status) {
var loadTime = Date.now() - t; // Calculate the load time
if (status === 'success') {
console.log('Page loaded successfully.');
} else {
console.log('Failed to load the page.');
}
// Performance metrics
var performanceData = page.evaluate(function() {
return {
'DOMContentLoaded': window.performance.timing.domContentLoadedEventEnd - window.performance.timing.navigationStart,
'loadEvent': window.performance.timing.loadEventEnd - window.performance.timing.navigationStart,
'pageLoadTime': window.performance.timing.loadEventEnd - window.performance.timing.navigationStart
};
});
// Output performance data
console.log('Performance Report:');
console.log('Page Load Time: ' + performanceData.pageLoadTime + ' ms');
console.log('DOMContent Loaded: ' + performanceData.DOMContentLoaded + ' ms');
console.log('Load Event: ' + performanceData.loadEvent + ' ms');
phantom.exit();
});
Explanation:
webpage.create(): এটি PhantomJS এর মাধ্যমে একটি নতুন পেজ তৈরি করে।page.open(): এটি পেজটি খুলে এবং লোডিং অবস্থা চেক করে।performance.timing: ব্রাউজার পারফরম্যান্স ডেটা, যেমন DOMContentLoaded এবং loadEvent এর সময় স্ট্যাম্প বিশ্লেষণ করতেwindow.performance.timingব্যবহার করা হয়েছে।performanceData: এটিevaluate()মেথডের মাধ্যমে পেজের পারফরম্যান্স তথ্য সংগ্রহ করে।console.log: বিভিন্ন পারফরম্যান্স মেট্রিক্স কনসোলে আউটপুট হিসেবে প্রদর্শন করা হয়েছে।
Step 3: PhantomJS স্ক্রিপ্ট চালানো
আপনার PhantomJS স্ক্রিপ্টটি চালানোর জন্য, কমান্ড লাইনে এটি রান করুন:
phantomjs performanceReport.js
এটি আপনাকে ওয়েব পেজের পারফরম্যান্স রিপোর্ট প্রদর্শন করবে, যেমন পেজ লোডের সময়, DOMContentLoaded এবং load event সময়ের ডেটা।
Step 4: Additional Performance Metrics
আপনি আরও বিভিন্ন পারফরম্যান্স মেট্রিক্স সংগ্রহ করতে পারেন, যেমন:
- Time to First Byte (TTFB): এটি একটি গুরুত্বপূর্ণ মেট্রিক যা সার্ভার রেসপন্স টাইম পরিমাপ করে। এটি HTTP রেসপন্সের প্রথম বাইট থেকে পেজের সম্পূর্ণ লোড হওয়া পর্যন্ত সময়কে পরিমাপ করে।
- Render Time: পেজের ভিজ্যুয়াল রেন্ডারিং প্রক্রিয়া কত দ্রুত চলছে, তা ট্র্যাক করতে পারেন।
- Request/Response Times: ওয়েব পেজে প্রেরিত এবং প্রাপ্ত HTTP রিকোয়েস্ট এবং রেসপন্সের সময় ট্র্যাক করতে পারেন।
Example - Additional Metrics Collection:
page.onResourceRequested = function(requestData, networkRequest) {
console.log('Requesting: ' + requestData.url);
};
page.onResourceReceived = function(response) {
console.log('Received response: ' + response.url);
};
page.onLoadFinished = function(status) {
console.log('Load Finished');
phantom.exit();
};
Step 5: Saving Reports to File
ফাইল আউটপুট হিসেবে রিপোর্ট সংরক্ষণ করতে, আপনি PhantomJS স্ক্রিপ্টের মধ্যে fs (File System) মডিউল ব্যবহার করতে পারেন।
var fs = require('fs');
// Save the performance data to a file
fs.write('performanceReport.txt', 'Page Load Time: ' + performanceData.pageLoadTime + ' ms\n', 'w');
এটি পারফরম্যান্স রিপোর্টকে performanceReport.txt ফাইলে সংরক্ষণ করবে।
PhantomJS এর মাধ্যমে আপনি ওয়েব পেজের পারফরম্যান্স বিশ্লেষণ করতে পারেন এবং একটি সম্পূর্ণ performance report তৈরি করতে পারেন, যা পেজ লোড টাইম, DOMContentLoaded ইভেন্ট এবং অন্যান্য পারফরম্যান্স মেট্রিক্স অন্তর্ভুক্ত করতে পারে। PhantomJS ব্যবহার করে ওয়েব পেজের বিভিন্ন মেট্রিক্স ট্র্যাক করা এবং রিপোর্ট তৈরি করা একটি শক্তিশালী পদ্ধতি, যা ওয়েব পেজের উন্নত পারফরম্যান্স টেস্টিং এবং অপটিমাইজেশনে সহায়তা করে।
Read more