- প্রশ্নটি কিছুটা পুরানো, তবে আমি এখানে জবাব বাকের ভাগ করা সমস্ত উত্তর এবং জেএসপিআরফের উপর ভিত্তি করে তৈরি কিছু মানদণ্ড আপনাকে দেখানোর জন্য এই উত্তরটি লিখতে চেয়েছিলাম।
আমার প্রাথমিকভাবে এটি খুঁজে পেতে একটি দ্রুত উপায়ের প্রয়োজন ছিল যে দীর্ঘ খড়ের মধ্যে একটি দীর্ঘ সূচ রয়েছে এবং শেষ অক্ষরগুলি ব্যতীত সেগুলি খুব অনুরূপ।
আমি যে কোডটি লিখেছি তা এখানে যা প্রতিটি ফাংশনের জন্য (স্প্লাইস, সাবস্ট্রিং, স্টার্টসইথ, ইত্যাদি) উভয়ই পরীক্ষা করে যখন তারা nestedString
1.000.0001 অক্ষরের খড়ের স্ট্রিং ( ) এর বিরুদ্ধে মিথ্যা এবং সত্য ফিরে আসে এবং 1.000.000 এর মিথ্যা বা সত্যবাদী সূঁচের স্ট্রিং চরগুলি ( testParentStringFalse
এবং testParentStringTrue
যথাক্রমে):
// nestedString is made of 1.000.001 '1' repeated characters.
var nestedString = '...'
// testParentStringFalse is made of 1.000.000 characters,
// all characters are repeated '1', but the last one is '2',
// so for this string the test should return false.
var testParentStringFalse = '...'
// testParentStringTrue is made of 1.000.000 '1' repeated characters,
// so for this string the test should return true.
var testParentStringTrue = '...'
// You can make these very long strings by running the following bash command
// and edit each one as needed in your editor
// (NOTE: on OS X, `pbcopy` copies the string to the clipboard buffer,
// on Linux, you would probably need to replace it with `xclip`):
//
// printf '1%.0s' {1..1000000} | pbcopy
//
function testString() {
let dateStart
let dateEnd
let avg
let count = 100000
const falseResults = []
const trueResults = []
/* slice */
console.log('========> slice')
dateStart = +new Date()
var res
for (let j = 0; j < count; j++) {
res = nestedString.slice(0, testParentStringFalse.length) === testParentStringFalse
}
dateEnd = +new Date()
avg = (dateEnd - dateStart)/count
falseResults[falseResults.length] = {
label: 'slice',
avg
}
console.log(`testString() slice = false`, res, 'avg: ' + avg + 'ms')
dateStart = +new Date()
var res
for (let j = 0; j < count; j++) {
res = nestedString.slice(0, testParentStringTrue.length) === testParentStringTrue
}
dateEnd = +new Date()
avg = (dateEnd - dateStart)/count
trueResults[trueResults.length] = {
label: 'slice',
avg
}
console.log(`testString() slice = true`, res, 'avg: ' + avg + 'ms')
console.log('<======== slice')
console.log('')
/* slice END */
/* lastIndexOf */
console.log('========> lastIndexOf')
dateStart = +new Date()
var res
for (let j = 0; j < count; j++) {
res = nestedString.lastIndexOf(testParentStringFalse, 0) === 0
}
dateEnd = +new Date()
avg = (dateEnd - dateStart)/count
falseResults[falseResults.length] = {
label: 'lastIndexOf',
avg
}
console.log(`testString() lastIndexOf = false`, res, 'avg: ' + avg + 'ms')
dateStart = +new Date()
var res
for (let j = 0; j < count; j++) {
res = nestedString.lastIndexOf(testParentStringTrue, 0) === 0
}
dateEnd = +new Date()
avg = (dateEnd - dateStart)/count
trueResults[trueResults.length] = {
label: 'lastIndexOf',
avg
}
console.log(`testString() lastIndexOf = true`, res, 'avg: ' + avg + 'ms')
console.log('<======== lastIndexOf')
console.log('')
/* lastIndexOf END */
/* indexOf */
console.log('========> indexOf')
dateStart = +new Date()
var res
for (let j = 0; j < count; j++) {
res = nestedString.indexOf(testParentStringFalse) === 0
}
dateEnd = +new Date()
avg = (dateEnd - dateStart)/count
falseResults[falseResults.length] = {
label: 'indexOf',
avg
}
console.log(`testString() indexOf = false`, res, 'avg: ' + avg + 'ms')
dateStart = +new Date()
var res
for (let j = 0; j < count; j++) {
res = nestedString.indexOf(testParentStringTrue) === 0
}
dateEnd = +new Date()
avg = (dateEnd - dateStart)/count
trueResults[trueResults.length] = {
label: 'indexOf',
avg
}
console.log(`testString() indexOf = true`, res, 'avg: ' + avg + 'ms')
console.log('<======== indexOf')
console.log('')
/* indexOf END */
/* substring */
console.log('========> substring')
dateStart = +new Date()
var res
for (let j = 0; j < count; j++) {
res = nestedString.substring(0, testParentStringFalse.length) === testParentStringFalse
}
dateEnd = +new Date()
avg = (dateEnd - dateStart)/count
falseResults[falseResults.length] = {
label: 'substring',
avg
}
console.log(`testString() substring = false`, res, 'avg: ' + avg + 'ms')
dateStart = +new Date()
var res
for (let j = 0; j < count; j++) {
res = nestedString.substring(0, testParentStringTrue.length) === testParentStringTrue
}
dateEnd = +new Date()
avg = (dateEnd - dateStart)/count
trueResults[trueResults.length] = {
label: 'substring',
avg
}
console.log(`testString() substring = true`, res, 'avg: ' + avg + 'ms')
console.log('<======== substring')
console.log('')
/* substring END */
/* startsWith */
console.log('========> startsWith')
dateStart = +new Date()
var res
for (let j = 0; j < count; j++) {
res = nestedString.startsWith(testParentStringFalse)
}
dateEnd = +new Date()
avg = (dateEnd - dateStart)/count
falseResults[falseResults.length] = {
label: 'startsWith',
avg
}
console.log(`testString() startsWith = false`, res, 'avg: ' + avg + 'ms')
dateStart = +new Date()
var res
for (let j = 0; j < count; j++) {
res = nestedString.startsWith(testParentStringTrue)
}
dateEnd = +new Date()
avg = (dateEnd - dateStart)/count
trueResults[trueResults.length] = {
label: 'startsWith',
avg
}
console.log(`testString() startsWith = true`, res, 'avg: ' + avg + 'ms')
console.log('<======== startsWith')
console.log('')
/* startsWith END */
falseResults.sort((a, b) => a.avg - b.avg)
trueResults.sort((a, b) => a.avg - b.avg)
console.log('false results from fastest to slowest avg:', falseResults)
console.log('true results from fastest to slowest avg:', trueResults)
}
আমি ক্রোম 75 , ফায়ারফক্স 67 , সাফারি 12 এবং অপেরা 62 এ এই বেনমার্ক পরীক্ষাটি চালিয়েছি ।
আমি এজ এবং আইয়িকে অন্তর্ভুক্ত করি নি কারণ এই মেশিনে আমার সেগুলি নেই তবে আপনি যদি কেউ এজ এর বিপরীতে স্ক্রিপ্টটি চালাতে চান এবং কমপক্ষে IE 9 এবং ফলাফলটি এখানে ভাগ করতে চান তবে আমি ফলাফলগুলি দেখতে খুব আগ্রহী হব would
কেবল মনে রাখবেন যে আপনাকে 3 টি দীর্ঘ স্ট্রিং পুনরায় তৈরি করতে হবে এবং স্ক্রিপ্টটি কোনও ফাইলে সংরক্ষণ করতে হবে যা আপনি ব্রাউজারের কনসোলে অনুলিপি / পেস্ট হিসাবে খুললে ব্রাউজারের কনসোলে এটি আটকাবে কারণ প্রতিটি স্ট্রিংয়ের দৈর্ঘ্য> = 1.000.000))
ফলাফলগুলি এখানে:
ক্রোম 75 ( substring
জয়):
false results from fastest to slowest avg:
1) {"label":"substring","avg":0.08271}
2) {"label":"slice","avg":0.08615}
3) {"label":"lastIndexOf","avg":0.77025}
4) {"label":"indexOf","avg":1.64375}
5) {"label":"startsWith","avg":3.5454}
true results from fastest to slowest avg:
1) {"label":"substring","avg":0.08213}
2) {"label":"slice","avg":0.08342}
3) {"label":"lastIndexOf","avg":0.7831}
4) {"label":"indexOf","avg":0.88988}
5) {"label":"startsWith","avg":3.55448}
ফায়ারফক্স 67 ( indexOf
জয়):
false results from fastest to slowest avg
1) {"label":"indexOf","avg":0.1807}
2) {"label":"startsWith","avg":0.74621}
3) {"label":"substring","avg":0.74898}
4) {"label":"slice","avg":0.78584}
5) {"label":"lastIndexOf","avg":0.79668}
true results from fastest to slowest avg:
1) {"label":"indexOf","avg":0.09528}
2) {"label":"substring","avg":0.75468}
3) {"label":"startsWith","avg":0.76717}
4) {"label":"slice","avg":0.77222}
5) {"label":"lastIndexOf","avg":0.80527}
সাফারি 12 ( slice
মিথ্যা ফলাফলের startsWith
জন্য বিজয়ী , সত্য ফলাফলের জন্য জয়ী, এছাড়াও পুরো পরীক্ষার সম্পাদন করার জন্য সাফারি মোট সময়ের দিক থেকে দ্রুততম):
false results from fastest to slowest avg:
1) "{\"label\":\"slice\",\"avg\":0.0362}"
2) "{\"label\":\"startsWith\",\"avg\":0.1141}"
3) "{\"label\":\"lastIndexOf\",\"avg\":0.11512}"
4) "{\"label\":\"substring\",\"avg\":0.14751}"
5) "{\"label\":\"indexOf\",\"avg\":0.23109}"
true results from fastest to slowest avg:
1) "{\"label\":\"startsWith\",\"avg\":0.11207}"
2) "{\"label\":\"lastIndexOf\",\"avg\":0.12196}"
3) "{\"label\":\"substring\",\"avg\":0.12495}"
4) "{\"label\":\"indexOf\",\"avg\":0.33667}"
5) "{\"label\":\"slice\",\"avg\":0.49923}"
অপেরা 62 ( substring
বিজয়ী Results ফলাফলগুলি ক্রোমের সাথে সমান এবং অপেরা ক্রোমিয়াম এবং ব্লিঙ্কের উপর ভিত্তি করে আমি অবাক হই না):
false results from fastest to slowest avg:
{"label":"substring","avg":0.09321}
{"label":"slice","avg":0.09463}
{"label":"lastIndexOf","avg":0.95347}
{"label":"indexOf","avg":1.6337}
{"label":"startsWith","avg":3.61454}
true results from fastest to slowest avg:
1) {"label":"substring","avg":0.08855}
2) {"label":"slice","avg":0.12227}
3) {"label":"indexOf","avg":0.79914}
4) {"label":"lastIndexOf","avg":1.05086}
5) {"label":"startsWith","avg":3.70808}
দেখা যাচ্ছে যে প্রতিটি ব্রাউজারের নিজস্ব প্রয়োগের বিশদ রয়েছে (অপেরা ছাড়াও যা ক্রোমের ক্রোমিয়াম এবং ব্লিঙ্কের উপর ভিত্তি করে)।
অবশ্যই, বিভিন্ন ব্যবহারের ক্ষেত্রে আরও পরীক্ষা করাতে পারত এবং করা উচিত (যেমন খড়ের খড়ের তুলনায় যখন সুই খুব কম, খড়ের খড়ি যখন সূচির চেয়ে ছোট হয় ইত্যাদি ...) তবে আমার ক্ষেত্রে আমার খুব দীর্ঘ স্ট্রিংগুলির তুলনা করা দরকার এবং এটি এখানে ভাগ করতে চেয়েছিলেন।