JavaScriptの文字列をクリアする必要がありますか?

なに? 文字列が汚れていませんか?

はい、できます。

//.....- 
console.log(typeof str); // string
console.log(str.length); // 15
console.log(str); // ""

, 30 ?

! 30 !

. — «- ». , - - , . , , . , , , .


, . . V8, , , . Google Chrome -, Node.js. , .

UPD4: Firefox , , .


, , , AJAX JavaScript, , - :

var news = [];

function checkNews() {
  var xhr = new XMLHttpRequest();
  xhr.open('GET', 'http://example.com/WarAndPeace', true); // 
  xhr.onload = function() {
    if (this.status != 200) return;
    // 
    var m = this.response.match(/<div class="news">(.*?)<.div>/); 
    if (!m) return;
    var feed = m[1]; //
    if (!news.find(e=>e==feed)) { // 
      news.push(feed);
      document.getElementById('allnews').innerHTML += '<br>' + feed;
    }
  };
  xhr.send();
}

setInterval(checkNews, 55000);

, , , . , . 200-300 — , , , . , 2 ! , Chrome .

- . - ! … ! ? ! . , , .


! — , . , JS, . — .



Retainers.



sliced string?


, , ! ??

- , , , . . , , - , .

:
- -> ->
, «», .

:

function MemoryLeak() {
  let huge = "x".repeat(15).repeat(1024).repeat(1024); // 15 
  let small = huge.substr(0,25); // 
  return small;
}

var arr = [];
var t = setInterval(e=>{ //   25   15 ?
  let str = MemoryLeak();
  //str = clearString(str);
  console.log(' :',str.length + ' ');
  arr.push(str);
  console.log('  :',JSON.stringify(arr).length+' ');
},1000);
//clearInterval(t);

25 . ? , . , GC ( ) , . . , , — .

1.5 , . GC , , . , .


«» . GC , .

, , , :

str = str - 0;

— . , , , :

obj[str] = 123;
str = null; //     

. , , . , . :

function clearString(str) {
  return str.split('').join('');
}

, , .

// ,   .
let m = big_data.match(/\sMY_OPTIONS_(\w+) = (\w+)\s/);
if (m) obj[m[1]] = clearString(m[2]); //- .

. , , V8 , 13 . , , . Firefox 12. :

function clearString(str) {
  return str.length < 12 ? str : str.split('').join('');
}

, 13 V8, 12-24 Firefox, .

? ?!


, . . . , .

, , . ?

. , , , , replace(), trim() .. , - /, .

nickname = clearString(nickname); //- .
long_live_obj.name = nickname; //  ,  .

. .

let cleared = clearString(xhr.response); //


function clearString(str) {
  return str.split('').join('');
}
function clearString2(str) {
  return JSON.parse(JSON.stringify(str));
}
function clearString3(str) {
  //     ' ' + str
  //       
  return (' ' + str).slice(1);
}

function Test(test_arr,fn) {
  let check1 = performance.now();
  let a = []; // .
  for(let i=0;i<1000000;i++){
    a.push(fn(test_arr[i]));
  }
  let check2 = performance.now();
  return check2-check1 || a.length;
}

var huge = "x".repeat(15).repeat(1024).repeat(1024); // 15Mb string
var test_arr = [];
for(let i=0;i<1000000;i++) {
  test_arr.push(huge.substr(i,25)); // .
}

console.log(Test(test_arr,clearString));
console.log(Test(test_arr,clearString2));
console.log(Test(test_arr,clearString3));


Chrome 73
console.log(Test(test_arr,clearString)); //700
console.log(Test(test_arr,clearString2)); //300
console.log(Test(test_arr,clearString3)); //280


UPD:
Opera Firefox @WanSpi
//Opera
console.log(Test(test_arr,clearString)); // 868.5000000987202
console.log(Test(test_arr,stringCopy)); // 493.80000005476177
console.log(Test(test_arr,clearString2)); // 435.4999999050051
console.log(Test(test_arr,clearString3)); // 282.60000003501773

//Firefox ( ,       )
console.log(Test(test_arr,clearString)); // 210
console.log(Test(test_arr,stringCopy)); // 2077
console.log(Test(test_arr,clearString2)); // 632
console.log(Test(test_arr,clearString3)); // 185


UPD2:
Node.js @V1tol
function clearString4(str) {
  // Buffer  Node.js
  //-  'utf-8'
  return Buffer.from(str).toString();
}
:
//763.9701189994812 //clearString
//567.9718199996278 //clearString2
//218.58974299952388 //clearString3
//704.1628979993984 // Buffer.from


UPD3 :
function clearStringFast(str) {
  return str.length < 12 ? str : (' ' + str).slice(1);
}

. 15 , 2 . 150 , 1500 , . .
: jsperf.com/sliced-string


Source: https://habr.com/ru/post/J449368/


All Articles