はい、できます。
//.....- console.log(typeof str); // string console.log(str.length); // 15 console.log(str); // ""
, 30 ?
! 30 !
. — «- ». , - - , . , , . , , , .
,
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