𝗥𝗲𝘀𝘂𝗹𝘁𝘀 𝗔𝗻𝗱 𝗥𝗲𝘀𝘂𝗹𝘁𝘀
তথ্যের জন্য, jsperf এ পারফরম্যান্স পরীক্ষা এবং কনসোলে কিছু জিনিস পরীক্ষা করা হয়। গবেষণার জন্য, ওয়েবসাইটটি irt.org ব্যবহার করা হয়। নীচে এই সমস্ত উত্সগুলির একত্রিত করে নীচে একটি উদাহরণ ফাংশন রয়েছে is
╔═══════════════╦══════╦═════════════════╦════════ ═══════╦═════════╦══════════╗
Od পদ্ধতি onকনকাটস্লাইস এবং পুশ.এপ্লি ║ পুশ.প্লাই এক্স 2 ║ ফর্মলুপ ║ স্প্রেড ║
╠═══════════════╬══════╬═════════════════╬════════ ═══════╬═════════╬══════════╣
O এমওপিএস / সেক ║179 ║104 ║ 76 ║ 81 ║28 ║
╠═══════════════╬══════╬═════════════════╬════════ ═══════╬═════════╬══════════╣
║ স্পর্শযুক্ত অ্যারে - হ্যাঁ! কেবল কাটা ║ না ║ সম্ভবত 2 ║ ║
Sp রাখে বিরল ║ rayarray (1 ম আর্গ) ║ ║ ║ ║
╠═══════════════╬══════╬═════════════════╬════════ ═══════╬═════════╬══════════╣
║ সমর্থন IMSIE 4║MSIE 5.5 ║ MSIE 5.5 ║ MSIE 4 ║এডিজ 12 ║
Source ( উত্স ) ║NNav 4║Nav 4.06 ║ NNav 4.06 ║ NNav 3 ║ MSIE NNav ║
╠═══════════════╬══════╬═════════════════╬════════ ═══════╬═════════╬══════════╣
Rআরার মতো ক্রিয়াকলাপ ║ কেবল ধাক্কা দেওয়া the হ্যাঁ! হ্যাঁ! যদি থাকে ║
একটি অ্যারের মতো ray 2ndarray (২ য় আর্গ) ║ ║ ║iterator 1 ║ ║
╚═══════════════╩══════╩═════════════════╩════════ ═══════╩═════════╩══════════╝
1 যদি অ্যারের-মতো বস্তুর কোনও সিম্বল.আইটিরেটর না থাকে সম্পত্তি , তবে চেষ্টা করে
এটি ছড়িয়ে দিতে ব্যতিক্রম ছুঁড়ে ফেলবে।
2 কোডের উপর নির্ভর করে। নিম্নলিখিত উদাহরণ কোড "YES" বিরলতা সংরক্ষণ করে।
function mergeCopyTogether(inputOne, inputTwo){
var oneLen = inputOne.length, twoLen = inputTwo.length;
var newArr = [], newLen = newArr.length = oneLen + twoLen;
for (var i=0, tmp=inputOne[0]; i !== oneLen; ++i) {
tmp = inputOne[i];
if (tmp !== undefined || inputOne.hasOwnProperty(i)) newArr[i] = tmp;
}
for (var two=0; i !== newLen; ++i, ++two) {
tmp = inputTwo[two];
if (tmp !== undefined || inputTwo.hasOwnProperty(two)) newArr[i] = tmp;
}
return newArr;
}
উপরে যেমন দেখা গেছে, আমি যুক্তি দিয়ে বলব যে কনক্যাট প্রায় সবসময়ই পারফরম্যান্স এবং অতিরিক্ত অ্যারেগুলির স্বল্পতা বজায় রাখার ক্ষমতা উভয়ের পক্ষে যায়। তারপরে, অ্যারে-লাইকগুলির জন্য (যেমন DOMNodeLists পছন্দ করুন document.body.children
) জন্য, আমি লুপটি ব্যবহার করার পরামর্শ দেব কারণ এটি দু'টি সর্বাধিক পারফরম্যান্ট এবং একমাত্র অন্যান্য পদ্ধতি যা স্পারস অ্যারে ধরে রাখে। নীচে, আমরা খুব শীঘ্রই বিচ্ছিন্নতা অ্যারে এবং অ্যারে-পছন্দগুলি দ্বারা বিভ্রান্তি দূর করতে বোঝাতে চাই over
𝗙𝘂𝘁𝘂𝗿𝗲 𝗙𝘂𝘁𝘂𝗿𝗲
প্রথমে কিছু লোক মনে করতে পারে যে এটি একটি ফ্লুক এবং ব্রাউজার বিক্রেতারা অবশেষে অ্যারে.প্রোটোটাইপ.পুশকে অ্যারে.প্রোটোটাইপ.কমকেটকে পরাজিত করার জন্য দ্রুততর হতে পারে optim ভুল! অ্যারে.প্রোটোটাইপ.কনক্যাট সর্বদা দ্রুত হবে (কমপক্ষে নীতিগতভাবে) কারণ এটি ডেটার উপরে একটি সাধারণ অনুলিপি-এন-পেস্ট। নীচে একটি 32-বিট অ্যারের বাস্তবায়ন দেখতে কেমন হতে পারে তার একটি সরলীকৃত প্রসিডো-ভিজ্যুয়াল ডায়াগ্রাম রয়েছে (দয়া করে মনে রাখবেন সত্যিকারের বাস্তবায়নগুলি আরও বেশি জটিল)
বাইট ║ ডেটা এখানে
═════╬═══════════
0x00 ║ int অসংখ্যিক প্রপার্টি লেন্থ = 0x00000000
0x01 ║ আইবিড
0x02 ║ আইবিড
0x03 ║ আইবিড
0x00 ║ int দৈর্ঘ্য = 0x00000001
0x01 ║ আইবিড
0x02 ║ আইবিড
0x03 ║ আইবিড
0x00। Int মান ইন্ডেক্স = 0x00000000
0x01 ║ আইবিড
0x02 ║ আইবিড
0x03 ║ আইবিড
0x00 ║ অন্তর্ভুক্ত মান টাইপ = জেএসপিআরসিআইভিটিবি
0x01 ║ আইবিড
0x02 ║ আইবিড
0x03 ║ আইবিড
0x00 ║ uintptr_t মান পয়েন্টার = 0x38d9eb60 (বা এটি যে কোনও স্মৃতিতে থাকে)
0x01 ║ আইবিড
0x02 ║ আইবিড
0x03 ║ আইবিড
উপরে যেমনটি দেখা গেছে, এর মতো কিছু অনুলিপি করতে আপনাকে যা করতে হবে তা বাইটের জন্য এটি বাইট অনুলিপি করার মতো প্রায় সহজ। অ্যারে.প্রোটোটাইপ.পুষ্প অ্যাপ্লিকেশন সহ, এটি ডেটাতে একটি অনুলিপি-অন-পেস্টের চেয়ে অনেক বেশি। "। অ্যাপ্লিকেশন" এ অ্যারে প্রতিটি সূচি পরীক্ষা করে এটি অ্যারে.প্রোটোটাইপ.পুশ এ পাস করার আগে এটি আর্গুমেন্টের সেটগুলিতে রূপান্তর করতে হয়। তারপরে, অ্যারে.প্রোটোটাইপ.পুশকে অতিরিক্ত প্রতিটি সময় আরও মেমরি বরাদ্দ করতে হবে এবং (কিছু ব্রাউজার বাস্তবায়নের জন্য) এমনকি বিরলতার জন্য কিছু অবস্থান-অনুসন্ধানের ডেটা পুনরায় গণনা করতে হবে।
এটি ভাবার বিকল্প উপায় হ'ল এটি। উত্স অ্যারে এক হ'ল কাগজের একটি বড় স্ট্যাক একসাথে। উত্স অ্যারে টু হ'ল আরও একটি বড় কাগজপত্র ack এটা কি আপনার পক্ষে দ্রুত হবে?
- দোকানে যান, প্রতিটি উত্স অ্যারের অনুলিপি জন্য প্রয়োজনীয় কাগজ কিনুন। তারপরে প্রতিটি উত্স অ্যারের স্ট্যাকগুলি কাগজটির মাধ্যমে একটি অনুলিপি-মেশিনের মাধ্যমে রাখুন এবং ফলস্বরূপ দুটি অনুলিপি একত্রে প্রধান করুন।
- দোকানে যান, প্রথম উত্স অ্যারের একক অনুলিপির জন্য পর্যাপ্ত কাগজ কিনুন। তারপরে, কোনও ফাঁকা দাগ দাগ পূরণের বিষয়টি নিশ্চিত করে, হাতে নতুন উত্সটিতে উত্স অ্যারের অনুলিপি করুন। তারপরে, দোকানে ফিরে যান, দ্বিতীয় উত্স অ্যারের জন্য পর্যাপ্ত কাগজ কিনুন। তারপরে, দ্বিতীয় উত্স অ্যারের মাধ্যমে যান এবং অনুলিপিটি অনুলিপি করার সময় অনুলিপি করুন। তারপরে, সমস্ত অনুলিপি করা কাগজপত্র একসাথে প্রধান করুন।
উপরের সাদৃশ্যগুলিতে বিকল্প # 1 অ্যারে.প্রোটোটাইপ কোডকেটকে উপস্থাপন করে এবং # 2 অ্যারে.প্রোটোটাইপ.পুশ.অ্যাপলিকে উপস্থাপন করে। আসুন আমরা এটি পরীক্ষা করে আসি ঠিক একই রকম জেএস্পেরফের সাথে আলাদা করে এটির ক্ষেত্রে যে এটি পৃথক পৃথক অ্যারেগুলির উপর পরীক্ষা করে, কঠিন অ্যারেগুলিতে নয়। এটি ঠিক এখানে খুঁজে পেতে পারেন ।
অতএব, আমি আমার কেসটিকে বিশ্রাম দিয়ে বলছি যে এই বিশেষ ব্যবহারের ক্ষেত্রে পারফরম্যান্সের ভবিষ্যত আরে.প্রোটোটাইপ.পুশ্রে নয়, বরং অ্যারে.প্রোটোটাইপ.কনকাটে রয়েছে।
𝗖𝗹𝗮𝗿𝗶𝗳𝗶𝗰𝗮𝘁𝗶𝗼𝗻𝘀
𝗔𝗿𝗿𝗮𝘆𝘀 𝗔𝗿𝗿𝗮𝘆𝘀
যখন অ্যারের নির্দিষ্ট সদস্যগুলি কেবল অনুপস্থিত থাকে। উদাহরণ স্বরূপ:
// This is just as an example. In actual code,
// do not mix different types like this.
var mySparseArray = [];
mySparseArray[0] = "foo";
mySparseArray[10] = undefined;
mySparseArray[11] = {};
mySparseArray[12] = 10;
mySparseArray[17] = "bar";
console.log("Length: ", mySparseArray.length);
console.log("0 in it: ", 0 in mySparseArray);
console.log("arr[0]: ", mySparseArray[0]);
console.log("10 in it: ", 10 in mySparseArray);
console.log("arr[10] ", mySparseArray[10]);
console.log("20 in it: ", 20 in mySparseArray);
console.log("arr[20]: ", mySparseArray[20]);
বিকল্পভাবে, জাভাস্ক্রিপ্ট আপনাকে অতিরিক্ত অতিরিক্ত অ্যারেগুলি সহজেই আরম্ভ করার অনুমতি দেয়।
var mySparseArray = ["foo",,,,,,,,,,undefined,{},10,,,,,"bar"];
𝗔𝗿𝗿𝗮𝘆-𝗟𝗶𝗸𝗲𝘀
একটি অ্যারের মতো একটি বস্তু যাতে কমপক্ষে একটি length
সম্পত্তি রয়েছে তবে এটি new Array
বা এর সাথে আরম্ভ করা হয়নি[]
; উদাহরণস্বরূপ, নীচের বিষয়গুলি অ্যারে-জাতীয় হিসাবে শ্রেণিবদ্ধ করা হয়েছে।
{0: "foo", 1: "বার", দৈর্ঘ্য: 2
document.body.children
নতুন Uint8Array (3)
- এটি অ্যারে-এর মতো কারণ যদিও এটি একটি (এন) (টাইপড) অ্যারে, এটিকে একটি অ্যারেতে জোর করে নির্মাণকারীকে পরিবর্তন করে।
(ফাংশন () {রিটার্ন আর্গুমেন্ট}) ()
এমন পদ্ধতি ব্যবহার করে যা ঘটে তা পর্যবেক্ষণ করুন যা স্লাইসের মতো অ্যারেগুলিতে অ্যারে-পছন্দ পছন্দ করে does
var slice = Array.prototype.slice;
// For arrays:
console.log(slice.call(["not an array-like, rather a real array"]));
// For array-likes:
console.log(slice.call({0: "foo", 1: "bar", length:2}));
console.log(slice.call(document.body.children));
console.log(slice.call(new Uint8Array(3)));
console.log(slice.call( function(){return arguments}() ));
- দ্রষ্টব্য: পারফরম্যান্সের কারণে ফাংশন আর্গুমেন্টে স্লাইস কল করা খারাপ অভ্যাস।
কনটেটের মতো অ্যারেতে অ্যারে-পছন্দগুলিকে বাধ্য করে না এমন কোনও পদ্ধতি ব্যবহার করে কী ঘটে তা লক্ষ্য করুন ।
var empty = [];
// For arrays:
console.log(empty.concat(["not an array-like, rather a real array"]));
// For array-likes:
console.log(empty.concat({0: "foo", 1: "bar", length:2}));
console.log(empty.concat(document.body.children));
console.log(empty.concat(new Uint8Array(3)));
console.log(empty.concat( function(){return arguments}() ));