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




All Articles