সিপিইউ সাইকেল, মেমোরি ইউজ, এক্সিকিউশন সময় ইত্যাদি?
যুক্ত: জাভাস্ক্রিপ্টে পরীক্ষার পারফরম্যান্সের কি পরিমাণগত উপায় আছে যা কেবল কোডটি কীভাবে চালায় তা উপলব্ধি ছাড়াও?
সিপিইউ সাইকেল, মেমোরি ইউজ, এক্সিকিউশন সময় ইত্যাদি?
যুক্ত: জাভাস্ক্রিপ্টে পরীক্ষার পারফরম্যান্সের কি পরিমাণগত উপায় আছে যা কেবল কোডটি কীভাবে চালায় তা উপলব্ধি ছাড়াও?
উত্তর:
প্রোফাইলাররা অবশ্যই নম্বর পাওয়ার একটি ভাল উপায়, তবে আমার অভিজ্ঞতায় অনুভূত কর্মক্ষমতা যা ব্যবহারকারী / ক্লায়েন্টের জন্য গুরুত্বপূর্ণ। উদাহরণস্বরূপ, আমাদের কাছে এক্সট অ্যাকর্ডিয়ান সহ একটি প্রকল্প ছিল যা কিছু ডেটা এবং তারপরে কয়েকটি নেস্টেড এক্সট গ্রিডগুলি দেখানোর জন্য প্রসারিত হয়েছিল। সমস্ত কিছুই আসলে খুব দ্রুত রেন্ডারিং করছিল, কোনও একক ক্রিয়াকলাপ দীর্ঘ সময় নেয় নি, একসাথে কেবল প্রচুর তথ্য রেন্ডার করা হয়েছিল, সুতরাং এটি ব্যবহারকারীকে ধীর মনে করেছে।
আমরা এটি 'স্থির' করেছি, একটি দ্রুত উপাদানগুলিতে স্যুইচ করে বা কোনও পদ্ধতি অপ্টিমাইজ করে না, তবে প্রথমে ডেটা রেন্ডার করে, তারপরে একটি সেটটাইমআউট দিয়ে গ্রিডগুলি রেন্ডার করে। সুতরাং, তথ্যটি প্রথমে উপস্থিত হয়েছিল, তারপরে গ্রিডগুলি তার পরে দ্বিতীয় স্থানে চলে যাবে। সামগ্রিকভাবে, এটি সেভাবে করতে কিছুটা বেশি প্রসেসিং সময় লাগল, তবে ব্যবহারকারীর কাছে, অনুভূত কর্মক্ষমতাটি উন্নত হয়েছিল।
আজকাল, ক্রোম প্রোফাইলার এবং অন্যান্য সরঞ্জাম, সর্বজনীন ব্যবহারের জন্য উপলব্ধ এবং সহজ মতোই থাকে console.time()
, console.profile()
এবং performance.now()
। ক্রোম আপনাকে একটি টাইমলাইন ভিউ দেয় যা আপনাকে দেখায় যে আপনার ফ্রেম রেটটি কীভাবে নিহত করছে, যেখানে ব্যবহারকারী সম্ভবত অপেক্ষা করছেন ইত্যাদি can
এই সমস্ত সরঞ্জামের জন্য ডকুমেন্টেশন সন্ধান করা সত্যিই সহজ, এর জন্য আপনার কোনও এসও উত্তর দরকার নেই। Years বছর পরে, আমি এখনও আমার মূল উত্তরের পরামর্শটি পুনরাবৃত্তি করব এবং উল্লেখ করব যে আপনার পক্ষে চিরতরে ধীর কোড চালানো যেতে পারে যেখানে কোনও ব্যবহারকারী তা খেয়াল করে না, এবং বেশ দ্রুত কোডটি যেখানে তারা চালায়, এবং তারা তাদের সম্পর্কে অভিযোগ করবে বেশ দ্রুত কোড যথেষ্ট দ্রুত হচ্ছে না। অথবা আপনার সার্ভার এপিআইতে আপনার অনুরোধটি 220 মিমি নিয়েছে বা অন্য কিছু। মুল বক্তব্যটি রয়ে গেছে যে আপনি যদি কোনও প্রোফাইলার বাইরে নিয়ে যান এবং কাজের জন্য অনুসন্ধান করতে যান তবে আপনি এটি খুঁজে পাবেন তবে এটি আপনার ব্যবহারকারীদের প্রয়োজনীয় কাজ নয়।
আমি সম্মত হই যে অনুধাবন করা পারফরম্যান্স সত্যিই সমস্ত বিষয়। তবে কখনও কখনও আমি কেবল কোনও কিছু করার পদ্ধতিটি দ্রুততর তা খুঁজে বের করতে চাই। কখনও কখনও পার্থক্য বিশাল এবং জ্ঞাত।
আপনি কেবল জাভাস্ক্রিপ্ট টাইমার ব্যবহার করতে পারেন। তবে আমি সাধারণত নেটিভ ক্রোম (বর্তমানে ফায়ারফক্স এবং সাফারিতেও) ডিভুল টুলগুলি console.time()
এবংconsole.timeEnd()
var iterations = 1000000;
console.time('Function #1');
for(var i = 0; i < iterations; i++ ){
functionOne();
};
console.timeEnd('Function #1')
console.time('Function #2');
for(var i = 0; i < iterations; i++ ){
functionTwo();
};
console.timeEnd('Function #2')
ক্রোম ক্যানারিটি সম্প্রতি ডিভাইসগুলির উত্স ট্যাবটির জন্য লাইন স্তরের প্রোফাইল যুক্ত করেছে যা আসুন আপনাকে দেখতে দিন যে প্রতিটি লাইনটি কার্যকর করতে কতক্ষণ সময় নিয়েছিল!
আমরা সর্বদা সাধারণ তারিখের অবজেক্ট দ্বারা যে কোনও ফাংশন দ্বারা নেওয়া সময় পরিমাপ করতে পারি ।
var start = +new Date(); // log start timestamp
function1();
var end = +new Date(); // log end timestamp
var diff = end - start;
performance.now()
Jscreen চেষ্টা করুন । কোডের স্নিপেটগুলি তুলনামূলকভাবে তুলনা করার জন্য এটি একটি অনলাইন জাভাস্ক্রিপ্ট পারফরম্যান্স সরঞ্জাম। আমি সব সময় এটি ব্যবহার।
%timeit
একটি ipython
REPL শেল এ আমি নিয়মিত এটি ব্যবহার করি ।
বেশিরভাগ ব্রাউজার এখন উচ্চ রেজোলিউশনের সময় বাস্তবায়ন করছে performance.now()
। new Date()
পারফরম্যান্স পরীক্ষার জন্য এটি সর্বোত্তম কারণ এটি সিস্টেম ঘড়ি থেকে স্বাধীনভাবে পরিচালনা করে।
ব্যবহার
var start = performance.now();
// code being timed...
var duration = performance.now() - start;
তথ্যসূত্র
performance.now()
।
অ্যাড-হক জাভাস্ক্রিপ্ট বেঞ্চমার্ক পরীক্ষা তৈরির জন্য জেএসলিটমাস একটি হালকা ওজনের সরঞ্জাম
এর মধ্যে function expression
এবং এর মধ্যে পারফরম্যান্স পরীক্ষা করতে দিন function constructor
:
<script src="JSLitmus.js"></script>
<script>
JSLitmus.test("new Function ... ", function() {
return new Function("for(var i=0; i<100; i++) {}");
});
JSLitmus.test("function() ...", function() {
return (function() { for(var i=0; i<100; i++) {} });
});
</script>
আমি উপরে যা করেছি তা হ'ল একটি function expression
এবং function constructor
একই ক্রিয়াকলাপটি সম্পাদন করা। নিম্নরূপ ফলাফল:
ফায়ারফক্স পারফরম্যান্স ফলাফল
IE পারফরম্যান্স ফলাফল
কিছু লোক নির্দিষ্ট প্লাগইনগুলি এবং / অথবা ব্রাউজারগুলির পরামর্শ দিচ্ছেন। আমি তা করব না কারণ তারা কেবলমাত্র সেই এক প্ল্যাটফর্মের জন্য সত্যই কার্যকর; ফায়ারফক্সে চালানো একটি পরীক্ষা আইই 7 তে সঠিকভাবে অনুবাদ করবে না। 99.999999% সাইটের বিবেচনা করে একাধিক ব্রাউজার তাদের দেখতে পেয়েছে, আপনাকে সমস্ত জনপ্রিয় প্ল্যাটফর্মগুলিতে কর্মক্ষমতা পরীক্ষা করতে হবে।
আমার পরামর্শ হ'ল এটি জেএসে রাখুন। কার্যকর এবং কার্যকর করার সময় আপনার সমস্ত জেএস পরীক্ষার সাথে একটি বেঞ্চমার্কিং পৃষ্ঠা তৈরি করুন। এমনকি এটি পুরোপুরি স্বয়ংক্রিয় রাখতে আপনার কাছে এজেএক্স-ফলাফলগুলি পুনরায় পোস্ট করতে পারেন।
তারপরে কেবল ধুয়ে নিন এবং বিভিন্ন প্ল্যাটফর্মের উপর পুনরাবৃত্তি করুন।
আমার একটি ছোট সরঞ্জাম রয়েছে যেখানে আমি ব্রাউজারে দ্রুত ছোট টেস্ট-কেস চালাতে পারি এবং সাথে সাথে ফলাফলগুলি পেতে পারি:
আপনি কোড দিয়ে খেলতে পারবেন এবং পরীক্ষিত ব্রাউজারে কোন কৌশলটি আরও ভাল তা জানতে পারবেন।
আমি মনে করি জাভাস্ক্রিপ্ট পারফরম্যান্স (সময়) পরীক্ষা যথেষ্ট যথেষ্ট। আমি এখানে জাভাস্ক্রিপ্ট কর্মক্ষমতা পরীক্ষার সম্পর্কে একটি খুব সহজ নিবন্ধ খুঁজে পেয়েছি ।
আপনি এটি ব্যবহার করতে পারেন: http://getfirebug.com/js.html । এটিতে জাভাস্ক্রিপ্টের প্রোফাইলার রয়েছে।
দ্রুত উত্তর
JQuery এর (শোঁ শব্দ উপর আরো নির্দিষ্টভাবে) তারিখে, আমরা ব্যবহার এই (চেকআউট মাস্টার এবং খোলা গতি আপনার ব্রাউজারে / index.html), যা পালাক্রমে ব্যবহারের benchmark.js । এটি লাইব্রেরি পরীক্ষার জন্য ব্যবহার করা হয়।
দীর্ঘ উত্তর
পাঠক বেঞ্চমার্ক, কাজের চাপ এবং profilers মধ্যে পার্থক্য জানেন না হলে, প্রথম ভিত্তি পরীক্ষার কয়েকটি কার্যকারিতা পড়া spec.org এর "রিডমি 1 ম" বিভাগে । এটি সিস্টেম পরীক্ষার জন্য, তবে এই ভিত্তিগুলি বোঝা জেএস পারফেক্ট টেস্টিংয়েও সহায়তা করবে। কিছু হাইলাইট:
মানদণ্ড কী?
একটি মানদণ্ড হ'ল "পরিমাপ বা মূল্যায়নের একটি মান" (ওয়েবস্টার এর দ্বিতীয় অভিধান)। একটি কম্পিউটার বেঞ্চমার্ক সাধারণত একটি কম্পিউটার প্রোগ্রাম যা কার্যকরভাবে সংজ্ঞায়িত সংস্থার কাজ করে - একটি কাজের চাপ - এবং পরীক্ষার কম্পিউটারটি কীভাবে সম্পাদিত হয়েছিল তা বর্ণনা করে কোনও ফলাফলের একটি ফর্ম - একটি মেট্রিক ফিরিয়ে দেয়। কম্পিউটার বেঞ্চমার্ক মেট্রিকগুলি সাধারণত গতি পরিমাপ করে: কাজের চাপ কত দ্রুত শেষ হয়েছিল; বা থ্রুপুট: ইউনিট সময়কালে কতগুলি কাজের চাপ ইউনিট শেষ হয়েছিল। একাধিক কম্পিউটারে একই কম্পিউটার বেঞ্চমার্ক চালানো একটি তুলনা করার অনুমতি দেয়।
আমার নিজের আবেদনটি কি বেঞ্চমার্ক করা উচিত?
আদর্শভাবে, সিস্টেমগুলির জন্য সেরা তুলনা পরীক্ষাটি আপনার নিজের কাজের চাপের সাথে আপনার নিজের প্রয়োগ। দুর্ভাগ্যক্রমে, আপনার নিজের কাজের চাপের সাথে নিজের অ্যাপ্লিকেশনটি ব্যবহার করে বিভিন্ন সিস্টেমের জন্য নির্ভরযোগ্য, পুনরাবৃত্তিযোগ্য এবং তুলনামূলক পরিমাপের বিস্তৃত ভিত্তি পাওয়া প্রায়শই অবৈধ। সমস্যাগুলির মধ্যে একটি ভাল পরীক্ষার কেস, গোপনীয়তার উদ্বেগ, তুলনামূলক শর্ত, সময়, অর্থ এবং অন্যান্য সীমাবদ্ধতা নিশ্চিত করতে অসুবিধা অন্তর্ভুক্ত থাকতে পারে।
যদি আমার নিজের আবেদন না হয় তবে কি?
আপনি একটি রেফারেন্স পয়েন্ট হিসাবে প্রমিত মানদণ্ড ব্যবহার বিবেচনা করতে পারেন। আদর্শভাবে, একটি মানসম্পন্ন বেঞ্চমার্কটি বহনযোগ্য হবে এবং আপনার আগ্রহী প্ল্যাটফর্মগুলিতে ইতিমধ্যে এটি চালিত হতে পারে However তবে ফলাফলগুলি বিবেচনা করার আগে আপনাকে নিশ্চিত হওয়া উচিত যে আপনি আপনার অ্যাপ্লিকেশন / কম্পিউটিংয়ের প্রয়োজনীয়তার মধ্যে কী সম্পর্ক স্থাপন করেছেন তা এবং মাপদণ্ডটি মাপছে। আপনি যে ধরণের অ্যাপ্লিকেশন চালাচ্ছেন সেই মানদণ্ডগুলি কি সমান? কাজের চাপের কি একই বৈশিষ্ট্য রয়েছে? এই প্রশ্নের আপনার উত্তরগুলির ভিত্তিতে, আপনি দেখতে শুরু করতে পারেন কীভাবে বেঞ্চমার্ক আপনার বাস্তবতা অনুমান করতে পারে।
দ্রষ্টব্য: একটি মানযুক্ত মানদণ্ড রেফারেন্স পয়েন্ট হিসাবে পরিবেশন করতে পারে। তবুও, আপনি যখন বিক্রেতা বা পণ্য নির্বাচন করছেন, তখন SPEC দাবী করে না যে কোনও মানসম্মত বেঞ্চমার্ক আপনার নিজস্ব প্রকৃত প্রয়োগকে বেঞ্চমার্কিং প্রতিস্থাপন করতে পারে।
পারফরম্যান্স টেস্টিং জেএস
আদর্শভাবে, সেরা পারফ টেস্টটি আপনার নিজের কাজের চাপটি যা আপনার পরীক্ষা করতে হবে তা পরিবর্তন করে নিজের অ্যাপ্লিকেশনটি ব্যবহার করা হবে: বিভিন্ন গ্রন্থাগার, মেশিন ইত্যাদি etc.
যদি এটি সম্ভব না হয় (এবং সাধারণত এটি হয় না)। প্রথম গুরুত্বপূর্ণ পদক্ষেপ: আপনার কাজের বোঝা নির্ধারণ করুন। এটি আপনার অ্যাপ্লিকেশনটির কাজের চাপ প্রতিফলিত করা উচিত। ইন এই আলাপ , Vyacheslav Egorov শিটি চাপ আপনি এড়িয়ে চলা উচিত কথা বলেছেন।
তারপরে, আপনি মেট্রিক সংগ্রহ করতে সহায়তা করার জন্য, সাধারণত গতি বা থ্রুপুটকে সহায়তা করতে আপনি বেঞ্চমার্ক.জেসের মতো সরঞ্জাম ব্যবহার করতে পারেন। সিজলে, আমরা কীভাবে সংশোধন বা পরিবর্তনগুলি লাইব্রেরির সিস্টেমিক কার্য সম্পাদনকে প্রভাবিত করে তা তুলনা করতে আগ্রহী।
যদি কিছু সত্যিই খারাপ সম্পাদন করে তবে আপনার পরবর্তী পদক্ষেপটি বাধা খুঁজে বের করা।
আমি কীভাবে বাধা খুঁজে পাব? Profilers
আপনি ব্যবহার করতে পারে console.profile Firebug মধ্যে
আমি সাধারণত জাভাস্ক্রিপ্টের পারফরম্যান্স পরীক্ষা করি, কতক্ষণ স্ক্রিপ্ট চলে। জাভাস্ক্রিপ্ট কোড পারফরম্যান্স পরীক্ষার জন্য jQuery প্রেমিকা একটি ভাল নিবন্ধ লিঙ্ক দিয়েছে , তবে নিবন্ধটি কেবলমাত্র আপনার জাভাস্ক্রিপ্ট কোডটি কতক্ষণ চালায় তা পরীক্ষা করে দেখায়। আমি " বিশাল ডেটা সেটগুলির সাথে কাজ করার সময় আপনার jQuery কোড উন্নত করার 5 টিপস" নামক নিবন্ধটি পড়ারও পরামর্শ দেব ।
সময়ের পারফরম্যান্সের জন্য এখানে পুনরায় ব্যবহারযোগ্য শ্রেণি রয়েছে। উদাহরণ কোড অন্তর্ভুক্ত:
/*
Help track time lapse - tells you the time difference between each "check()" and since the "start()"
*/
var TimeCapture = function () {
var start = new Date().getTime();
var last = start;
var now = start;
this.start = function () {
start = new Date().getTime();
};
this.check = function (message) {
now = (new Date().getTime());
console.log(message, 'START:', now - start, 'LAST:', now - last);
last = now;
};
};
//Example:
var time = new TimeCapture();
//begin tracking time
time.start();
//...do stuff
time.check('say something here')//look at your console for output
//..do more stuff
time.check('say something else')//look at your console for output
//..do more stuff
time.check('say something else one more time')//look at your console for output
ইউএক্স প্রোফাইলার ব্যবহারকারীর দৃষ্টিকোণ থেকে এই সমস্যাটির কাছে যান। এটি কিছু ব্রাউজার ইভেন্ট, নেটওয়ার্ক ক্রিয়াকলাপ ইত্যাদি কিছু ব্যবহারকারীর ক্রিয়া (ক্লিক) এর কারণে সংঘবদ্ধ করে এবং লেটেন্সি, টাইমআউট ইত্যাদির মতো সমস্ত দিক বিবেচনা করে consideration
আমি অনুরূপ কিছু খুঁজছিলাম কিন্তু এটি পাওয়া গেল।
এটি একপাশে তুলনা করতে দেয় এবং আপনি ফলাফলগুলি ভাগ করে নিতে পারেন share
সুবর্ণ নিয়মটি কোনও পরিস্থিতিতে আপনার ব্যবহারকারীদের ব্রাউজারটিকে লক করা উচিত নয়। এর পরে, আমি সাধারণত মৃত্যুদন্ডের সময়টি দেখি, তার পরে মেমরি ব্যবহার হয় না (যদি আপনি ক্রেজি কিছু না করেন, তবে এটি উচ্চতর অগ্রাধিকার হতে পারে)।
পারফরম্যান্স টেস্টিং দেরিতে হিসাবে একটি গুঞ্জনবর্ণের কিছুতে পরিণত হয়েছিল তবে এটি বলার অপেক্ষা রাখে না যে পারফরম্যান্স টেস্ট কিউএ বা পণ্য পাঠানোর পরেও গুরুত্বপূর্ণ প্রক্রিয়া নয়। এবং আমি অ্যাপটি বিকাশ করার সময় আমি অনেকগুলি বিভিন্ন সরঞ্জাম ব্যবহার করি, এর মধ্যে কিছু ক্রোম প্রোফাইলারের মতো উপরে উল্লিখিত আমি সাধারণত একটি সাএএস বা এমন কিছু ওপেনসোর্স দেখি যা আমি যেতে পারি এবং এ সম্পর্কে ভুলে যেতে পারি যতক্ষণ না আমি এই সতর্কতাটি না পেয়ে বলি যে কিছু পেটে গেছে went ।
প্রচুর দুর্দান্ত সরঞ্জাম রয়েছে যা আপনাকে কয়েকটি বুনিয়াদি সতর্কতা সেট আপ করার জন্য হুপের মধ্য দিয়ে ঝাঁপিয়ে না পড়ে পারফরম্যান্সে নজর রাখতে সহায়তা করবে। এখানে আমি কয়েকটি নিজের জন্য পরীক্ষা করা মূল্যবান বলে মনে করি।
একটি পরিষ্কার ছবি চেষ্টা ও আঁকার জন্য, কীভাবে প্রতিক্রিয়ার অ্যাপ্লিকেশনটির জন্য পর্যবেক্ষণ সেট আপ করা যায় সে সম্পর্কে এখানে একটি ছোট টিউটোরিয়াল।
নির্দিষ্ট ক্রিয়াকলাপের জন্য পারফরম্যান্সের তথ্য সংগ্রহ করার এটি একটি ভাল উপায়।
start = new Date().getTime();
for (var n = 0; n < maxCount; n++) {
/* perform the operation to be measured *//
}
elapsed = new Date().getTime() - start;
assert(true,"Measured time: " + elapsed);