جافا سكريبت سلسلة سلسلة أسرع من هذا المثال ؟

StackOverflow https://stackoverflow.com/questions/153381

  •  03-07-2019
  •  | 
  •  

سؤال

لدي لسلسلة مجموعة من السلاسل في جافا سكريبت و هل تبحث عن أسرع وسيلة للقيام بذلك.دعونا نفترض أن جافا سكريبت لإنشاء كبير XML"ملف" ، بطبيعة الحال ، يتكون من العديد من سلاسل صغيرة.حتى أتيت مع:

    var sbuffer = [];
    for (var idx=0; idx<10000; idx=idx+1) {
        sbuffer.push(‘<xmltag>Data comes here... bla... </xmltag>’);
    }
    // Now we "send" it to the browser...
    alert(sbuffer.join(”));

لا تولي أي اهتمام حلقة أو أخرى "متطورة" كود الذي يبني على سبيل المثال.

سؤالي هو:عن عدد غير معروف من سلاسل, هل لديك أسرع من خوارزمية / الطريقة / فكرة لسلسلة الصغيرة العديد من سلاسل ضخمة ؟

هل كانت مفيدة؟

المحلول

تغيير الخط:

sbuffer.push(‘Data comes here... bla... ’);

إلى

sbuffer[sbuffer.length] = ‘Data comes here... bla... ’;

سوف تعطيك 5-50% سرعة اكتساب (اعتمادا على المتصفح في أي مكسب سوف يكون أعلى)

التحيات.

نصائح أخرى

السؤال جافا سكريبت سلسلة سلسلة وقد قبلت الإجابة على هذا الروابط جيد جدا مقارنة جافا سكريبت سلسلة سلسلة الأداء.

تحرير: كنت أعتقد أنك يمكن أن eek أكثر قليلا في الأداء باستخدام داف الجهاز كما يوحي المقالة.

أعتقد أنك قريبة جدا الأمثل.YMMV قدر كبير من السرعة المكتسبة أو المفقودة داخل محرك جافا سكريبت من عملية المضيف (على سبيل المثالالمتصفح).

أعتقد أن دفع السلاسل على صفيف ثم الانضمام إلى مجموعة أسرع تقنية سلسلة سلسلة في جافا سكريبت.هناك بعض الأدلة الداعمة في هذا النقاش حول W3C DOM مقابلinnerHTML.لاحظ الفرق بين innerHTML 1 و innerHTML 2 النتائج.

بقدر ما أعرف, خوارزمية الخاص بك هو جيد و يعرف performant حل سلسلة سلسلة المشكلة.

حذار من أي سوء جامع القمامة!ماذا يفترض أن أفعل مع مجموعة الخاصة بك بعد استخدام ؟ ربما سوف تحصل على GC ؟

يمكنك الحصول على perfornace على وصل مع تنضم ثم تفقد على بعد GC تينغ.من ناحية أخرى إذا ترك مجموعة في نطاق كل وقت ، وليس إعادة استخدامها ، وهذا يمكن أن يكون حلا جيدا.

شخصيا أود simpliest الحل:فقط استخدام += المشغل.

قد تحصل على أكثر سرعة من قبل التخزين المؤقت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top