আমি কয়েকটি কোড প্রকল্প সমাধান দেখতে পাচ্ছি ।
তবে জাভাস্ক্রিপ্টে নিয়মিত প্রয়োগ হচ্ছে?
আমি কয়েকটি কোড প্রকল্প সমাধান দেখতে পাচ্ছি ।
তবে জাভাস্ক্রিপ্টে নিয়মিত প্রয়োগ হচ্ছে?
উত্তর:
আপনার যদি ইন্টারনেট এক্সপ্লোরারের জন্য কোড লিখতে হয় তবে নিশ্চিত হয়ে নিন যে আপনি কোনও বাস্তবায়ন বেছে নিয়েছেন, যা অ্যারে যোগদান করে। +
বা +=
অপারেটরের সাথে সংযুক্তকরণের স্ট্রিংগুলি আইইতে অত্যন্ত ধীর। এটি আই 6 এর ক্ষেত্রে বিশেষভাবে সত্য। আধুনিক ব্রাউজারগুলিতে +=
প্রায়শই অ্যারে যোগ হয় তত দ্রুত।
যখন আমাকে প্রচুর স্ট্রিং কনটেন্টেশন করতে হয় আমি সাধারণত একটি অ্যারে পূরণ করি এবং স্ট্রিং নির্মাতা শ্রেণি ব্যবহার করি না:
var html = [];
html.push(
"<html>",
"<body>",
"bla bla bla",
"</body>",
"</html>"
);
return html.join("");
নোট করুন যে push
পদ্ধতিগুলি একাধিক যুক্তি গ্রহণ করে।
[foo(), "bar", "baz"].join("");
কাজ করে।
push
একাধিক যুক্তি গ্রহণ করতে পারে। এলোমেলো জিনিস আপনি শিখেন।
আমি কেবল http://jsperf.com/javascript-concat-vs-join/2 এ পারফর্মেন্সটি যাচাই করেছি । পরীক্ষার ক্ষেত্রে কেসনেটেট বা বর্ণমালায় 1,000 বার যোগদান হয়।
বর্তমান ব্রাউজারগুলিতে (এফএফ, অপেরা, আইই ১১, ক্রোম) "কনক্যাট" "যোগদান" এর চেয়ে প্রায় 4-10 গুণ বেশি গতিযুক্ত।
আইই 8 তে উভয়ই সমান ফলাফল নিয়ে আসে।
আই 7-তে, "যোগদান" দুর্ভাগ্যক্রমে প্রায় 100 গুণ দ্রুত faster
না, স্ট্রিংগুলি তৈরি করার জন্য কোনও অন্তর্নির্মিত সমর্থন নেই। পরিবর্তে আপনাকে কনক্রিটেশন ব্যবহার করতে হবে।
আপনি অবশ্যই আপনার স্ট্রিংয়ের বিভিন্ন অংশের একটি অ্যারে তৈরি করতে পারেন এবং তারপরে join()
সেই অ্যারেটিতে কল করতে পারেন, তবে এটি আপনি যে জাভাস্ক্রিপ্ট দোভাষী ব্যবহার করছেন তাতে কীভাবে যোগদানটি প্রয়োগ করা হবে তার উপর নির্ভর করে।
str1+str2
পদ্ধতির বনাম array.push(str1, str2).join()
পদ্ধতির গতির তুলনা করার জন্য আমি একটি পরীক্ষা করেছি । কোডটি সহজ ছিল:
var iIterations =800000;
var d1 = (new Date()).valueOf();
str1 = "";
for (var i = 0; i<iIterations; i++)
str1 = str1 + Math.random().toString();
var d2 = (new Date()).valueOf();
log("Time (strings): " + (d2-d1));
var d3 = (new Date()).valueOf();
arr1 = [];
for (var i = 0; i<iIterations; i++)
arr1.push(Math.random().toString());
var str2 = arr1.join("");
var d4 = (new Date()).valueOf();
log("Time (arrays): " + (d4-d3));
আমি এটি একটি উইন্ডোজ 7 এক্স 64 এ উভয়ই ইন্টারনেট এক্সপ্লোরার 8 এবং ফায়ারফক্স 3.5.5 এ পরীক্ষা করেছি।
শুরুতে আমি স্বল্প সংখ্যক পুনরাবৃত্তির উপর পরীক্ষা করেছি (কয়েকশো, কয়েক হাজার আইটেম)। ফলাফলগুলি অনির্দেশ্য ছিল (কখনও কখনও স্ট্রিং কনটেনটেশন 0 মিলিসেকেন্ড নেয়, কখনও কখনও এটি 16 মিলিসেকেন্ড নেয়, অ্যারে যোগদানের জন্য একই)।
আমি যখন গণনাটি 50,000 এ বাড়িয়েছি, তখন বিভিন্ন ব্রাউজারে ফলাফলগুলি আলাদা ছিল - ইন্টারনেট এক্সপ্লোরারে স্ট্রিং কনটেন্টেশনটি দ্রুত ছিল (94 মিলিসেকেন্ড) এবং ফায়ারফক্সে অ্যারে যোগটি দ্রুত ছিল (113 মিলিসেকেন্ড) স্ট্রিং যোগদান (117 মিলিসেকেন্ড)।
তারপরে আমি গণনাটি 500'000 এ বাড়িয়েছি। এখন উভয় ব্রাউজারে স্ট্রিং কনটেনটেশনের চেয়ে ধীরarray.join()
ছিল : স্ট্রিং কনটেনটেশনটি ইন্টারনেট এক্সপ্লোরারে 937 এমএস, ফায়ারফক্সে 1155 এমএস, ইন্টারনেট এক্সপ্লোরারে অ্যারে 1265 এবং ফায়ারফক্সে 1207 এমএস ছিল।
850,000 ডলার ছিল "স্ক্রিপ্টটি কার্যকর হতে খুব বেশি সময় নিচ্ছে" না করেই আমি ইন্টারনেট এক্সপ্লোরারে পরীক্ষা করতে পারতাম সর্বোচ্চ পুনরাবৃত্তি গণনা count তারপরে ইন্টারনেট এক্সপ্লোরারটির স্ট্রিং কনটেনটেশনের জন্য 1593 এবং অ্যারে জোনের জন্য 2046, এবং ফায়ারফক্সের স্ট্রিং কনটেনটেশনের জন্য 2101 এবং অ্যারে জয়েনের জন্য 2249 ছিল।
ফলাফল - পুনরাবৃত্তির সংখ্যা যদি কম হয় তবে আপনি ব্যবহারের চেষ্টা করতে পারেন array.join()
, কারণ এটি ফায়ারফক্সে আরও দ্রুত হতে পারে। সংখ্যাটি বাড়লে, string1+string2
পদ্ধতিটি দ্রুত হয়।
আমি ইন্টারনেট এক্সপ্লোরার 6 (উইন্ডোজ এক্সপি) এ পরীক্ষাটি করেছিলাম। প্রক্রিয়াটি তাত্ক্ষণিক প্রতিক্রিয়া জানাতে থামিয়েছিল এবং কখনই শেষ হয় না, যদি আমি ১০,০০,০০০ এরও বেশি পুনরাবৃত্তিতে পরীক্ষার চেষ্টা করি। 40,000 পুনরাবৃত্তিতে ফলাফল ছিল
Time (strings): 59175 ms
Time (arrays): 220 ms
এর অর্থ হল - আপনার যদি ইন্টারনেট এক্সপ্লোরার 6 সমর্থন করতে হয়, array.join()
তবে স্ট্রিং কনকেন্টেশনের চেয়ে দ্রুত কোনটি চয়ন করুন ।
join()
ECMAScript এর অংশ এবং প্রতি জাভাস্ক্রিপ্ট ইন্টারপ্রেটার এটি প্রয়োগ করে। কেন এটি "নির্ভর" হবে?
এই কোডটি কিছু পরিবর্তন হিসাবে আপনি নিতে চাইছেন এমন রাস্তার মতো দেখাচ্ছে।
আপনি দেখতে এই জাতীয় চেহারা পরিবর্তন করতে চান। 0 নম্বরটি গ্রহণ করার জন্য এবং এটিকে ফিরে আসার জন্য আমি এটি পরিবর্তন করেছি this
যাতে আপনি নিজের সংযোজনগুলি শৃঙ্খলে রাখতে পারেন ।
StringBuilder.prototype.append = function (value) {
if (value || value === 0) {
this.strings.push(value);
}
return this;
}
null
, false
খালি স্ট্রিং, undefined
বা NaN
।
জাভাস্ক্রিপ্টের ECMAScript 6 সংস্করণ (ওরফে ECMAScript 2015) স্ট্রিং আক্ষরিক পরিচয় করিয়ে দিয়েছে ।
var classType = "stringbuilder";
var q = `Does JavaScript have a built-in ${classType} class?`;
লক্ষ্য করুন যে ব্যাক-টিকগুলি একক উদ্ধৃতির পরিবর্তে স্ট্রিংটি আবদ্ধ করুন।
সি # তে আপনি এর মতো কিছু করতে পারেন
String.Format("hello {0}, your age is {1}.", "John", 29)
জাভাস্ক্রিপ্টে আপনি এর মতো কিছু করতে পারেন
var x = "hello {0}, your age is {1}";
x = x.replace(/\{0\}/g, "John");
x = x.replace(/\{1\}/g, 29);
{0}
প্রতিস্থাপন করা হয়েছে তাতে যদি তা থাকে তবে এটি ভেঙে যাবে {1}
।
আগ্রহীদের জন্য, অ্যারে.জয়িনকে আহ্বান করার বিকল্প এখানে রয়েছে:
var arrayOfStrings = ['foo', 'bar'];
var result = String.concat.apply(null, arrayOfStrings);
console.log(result);
আশানুরূপ আউটপুট হ'ল স্ট্রিং 'ফুবার'। ফায়ারফক্সে, এই পদ্ধতির অ্যারে.জয়িনকে ছাড়িয়ে যায় তবে + কনটেনটেশন দ্বারা ছাড়িয়ে যায়। স্ট্রিংকনক্যাট যেহেতু প্রতিটি বিভাগকে পৃথক যুক্তি হিসাবে নির্দিষ্ট করা প্রয়োজন, তাই কলকারী জাভাস্ক্রিপ্ট ইঞ্জিন দ্বারা চালিত কোনও যুক্তি গণনা সীমা দ্বারা সীমাবদ্ধ। কটাক্ষপাত Function.prototype.apply () ডকুমেন্টেশন দেখুন।
আমি এই ফাংশনটি সংজ্ঞায়িত করেছি:
function format() {
var args = arguments;
if (args.length <= 1) {
return args;
}
var result = args[0];
for (var i = 1; i < args.length; i++) {
result = result.replace(new RegExp("\\{" + (i - 1) + "\\}", "g"), args[i]);
}
return result;
}
এবং সি # এর মতো বলা যেতে পারে:
var text = format("hello {0}, your age is {1}.", "John", 29);
ফলাফল:
হ্যালো জন, আপনার বয়স 29
যখন আমি জাভাস্ক্রিপ্টে নিজেকে অনেকগুলি স্ট্রিং কনটেনটেশন করতে দেখি তখন আমি টেম্প্লেটিংয়ের সন্ধান শুরু করি। Handlebars.js এইচটিএমএল এবং জাভাস্ক্রিপ্টকে আরও পাঠযোগ্য keeping http://handlebarsjs.com
কীভাবে sys.StringBuilder()
নীচের নিবন্ধটি চেষ্টা করুন।