سؤال

على فريقي نفعل عادة سلسلة concatentation مثل هذا:

var url = // some dynamically generated URL
var sb = new StringBuffer();
sb.append("<a href='").append(url).append("'>click here</a>");

من الواضح التالية هو أكثر قابلية للقراءة:

var url = // some dynamically generated URL
var sb = "<a href='" + url + "'>click here</a>";

ولكن شبيبة خبراء يدعون أن + المشغل هو أقل من performant StringBuffer.append().هل هذا صحيح حقا ؟

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

المحلول

إنترنت إكسبلورر هو المتصفح الوحيد الذي يعاني من هذا في عالم اليوم.(الإصدارات 5 و 6 و 7 الكلب بطيئة.8 لا تظهر نفس التدهور.) ما هو أكثر من ذلك ، أي يحصل أبطأ وأبطأ أطول سلسلة الخاص بك هو.

إذا كان لديك سلاسل طويلة لسلسلة ثم بالتأكيد استخدام صفيف.الانضمام إلى هذه التقنية.(أو بعض StringBuffer التفاف حول هذه القراءة.) ولكن إذا كان لديك سلاسل قصيرة لا تهتم.

نصائح أخرى

المثال الخاص بك ليست جيدة ، فإنه من غير المحتمل جدا أن الأداء سوف تكون مختلفة كثيرا.في المثال الخاص بك القراءة يجب أن ترامب الأداء لأن الأداء مكاسب واحد مقابل الآخر negligable.فوائد مجموعة (StringBuffer) هي الظاهر فقط عندما كنت تفعل العديد من concatentations.حتى ذلك الحين الأميال الخاص بك يمكن جدا اعتمادا على المتصفح الخاص بك.

هنا هو مفصل تحليل الأداء الذي يظهر الأداء باستخدام مختلف جافا سكريبت سلسلة أساليب عبر العديد من متصفحات مختلفة; سلسلة الأداء تحليل

join() once, concat() once, join() for, += for, concat() for

المزيد:
Ajaxian >> سلسلة الأداء في أي:الصفيف.الانضمام vs += تابع

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

أعتقد أن سلسلة سلسلة لن تكون عقبة.

اتفق مع مايكل هارين.

تنظر أيضا في استخدام المصفوفات والانضمام إذا كان الأداء هو في الواقع مشكلة.

var buffer = ["<a href='", url, "'>click here</a>"];
buffer.push("More stuff");
alert(buffer.join(""));

جرب هذا:

var s = ["<a href='", url, "'>click here</a>"].join("");

جافا سكريبت لا أصلي StringBuffer كائن ، لذلك أفترض أن هذا هو من مكتبة تستخدمه أو سمة من سمات غير عادية المضيف البيئة (أيغير المتصفح).

أشك في مكتبة (كتب في JS) أن تنتج أي شيء بشكل أسرع ، على الرغم من أن الأم StringBuffer وجوه قد.إجابة محددة يمكن العثور عليها مع التعريف (إذا كنت تقوم بتشغيل في المتصفح ثم الحرائق سوف توفر لك مع التعريف عن شبيبة المحرك وجدت في فايرفوكس).

مثل بالفعل وقد لاحظ بعض المستخدمين:هذا لا يمت بصلة صغيرة السلاسل.

و جافا سكريبت الجديد محركات في فايرفوكس, سفاري أو كروم جوجل الأمثل لذلك

"<a href='" + url + "'>click here</a>";

هو سريع مثل

["<a href='", url, "'>click here</a>"].join("");

في كلمات كانوث, "سابق لأوانه الأمثل هو أصل كل الشرور!" الصغيرة فرقا إما الطريقة التي من المرجح أن لا يكون لديك الكثير من تأثير في نهاية المطاف ؛ سأختار أكثر قابلية للقراءة واحد.

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

أعرف أن هذا المنصب هو عرجاء ، ولكن أنا من غير قصد نشر شيء مختلف تماما التفكير كان هذا موضوع مختلف و لا أعرف كيفية حذف المشاركات.بلدي سيئة...

فمن السهل جدا لإعداد سريع معيارا تحقق من أداء جافا سكريبت باستخدام الاختلافات jspref.com.والتي ربما لم يكن متواجدا عندما سئل هذا السؤال.ولكن الناس عثرة على هذا السؤال ينبغي أن تأخذ alook في الموقع.

لقد فعلت ذلك لاختبار سريع من أساليب مختلفة من سلسلة في http://jsperf.com/string-concat-methods-test.

أود أن استخدام نمط وظيفي ، مثل:

function href(url,txt) {
  return "<a href='" +url+ "'>" +txt+ "</a>"
}

function li(txt) {
  return "<li>" +txt+ "</li>"
}

function ul(arr) {
  return "<ul>" + arr.map(li).join("") + "</ul>"
}

document.write(
  ul(
    [
      href("http://url1","link1"),
      href("http://url2","link2"),
      href("http://url3","link3")
    ]
  )
)

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

هذا أيضا يميل إلى استخدام وسيطة سلاسل تلقائيا.

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

نعم حسب المعتاد المعايير.E. G : http://mckoss.com/jscript/SpeedTrial.htm.

ولكن بالنسبة صغيرة سلاسل, هذا لا يهم.سوف نهتم فقط العروض على سلاسل كبيرة جدا.ما هو أكثر من ذلك ، في معظم JS النصي عنق الزجاجة نادرا ما على سلسلة التلاعب منذ ليس هناك ما يكفي من ذلك.

كنت أفضل مشاهدة دوم التلاعب.

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