Во время разработки сценариев большая строка часто объединяется и слипается в большую строку для вывода в соответствии с определенным правилом. Например, при написании элементов управления скрипта вывод HTML -тегов, которые управляют внешним видом всего элемента управления. Например, при динамическом анализе HTML-тегов после получения значения на стороне сервера в AJAX я не буду обсуждать конкретное применение строк сплайсинга здесь. Я просто хочу обсудить эффективность сплайсинга здесь.
Когда мы пишем код, мы используем оператор " +=", S += String; Это самый знакомый способ написать. Интересно, заметили ли вы это. Когда комбинированная струнная емкость составляет десятки K или даже сотни K, сценарий очень медленно выполняется, а скорость использования процессора очень высока, например:
Кода -копия выглядит следующим образом:
var str = "01234567891123456789212345678931234567894123456789";
STR+= "51234567896123456789712345678981234567899123456789/n";
var result = "";
для (var i = 0; i <2000; i ++) result+= str;
Всего за один шаг генерируемая строка результата составляет 200 тыс., Который занимает 1,1 секунды (это связано с конфигурацией компьютера), а пик процессора составляет 100%. (Я сделал больше петлей, чтобы увидеть эффект более интуитивно). Можно предположить, что всего лишь один шаг операции занял у меня больше секунды, и в сочетании со временем, потраченным на другие коды, время выполнения всего блока сценария было бы невыносимым. Так есть ли решение оптимизации? Есть другой способ? Конечно, есть ответ, иначе я был бы глупо написать эту статью.
Более быстрый способ - использовать массив. При разбросе петли, это не для того, чтобы разбивать его в определенную строку, а положить строку в массив и, наконец, использовать массив.join (""), чтобы получить строку результата. Пример кода:
Кода -копия выглядит следующим образом:
var str = "01234567891123456789212345678931234567894123456789";
STR+= "51234567896123456789712345678981234567899123456789/n";
var result = "", a = new Array ();
для (var i = 0; i <2000; i ++) a [i] = str;
result = a.join (""); a = null;
Вы можете проверить и проверить время, необходимое для объединения строки того же размера. Результат, который я протестировал здесь: <15 миллисекунд. Обратите внимание, что его подразделение составляет миллисекунды. То есть, комбинируя такую строку 200 тыс., Потребление времени двух режимов составляет около двух порядков. что это значит? Это означает, что последний закончил свою работу и вернулся с обеда, в то время как первый все еще работает в качестве кули. Я напишу тестовую страницу. Вы можете скопировать следующий код и сохранить его в виде файла HTM и открыть его на веб -странице, чтобы проверить разницу в эффективности между ними. В любом случае, я проверяю первое, которое займет полминуты, а второй, который занимает 0,07 секунды (10 000 петлей).
Кода -копия выглядит следующим образом:
<тело>
Количество сплайсинга строки <input id = "totle" value = "1000" size = "5" maxlength = "5">
<input type = "button" value = "метод сплайсинга строки" onclick = "method1 ()">
<input type = "button" value = "Метод соединения массива onclick =" method2 () "> <br>
<div id = "method1"> </div>
<div id = "method2"> </div>
<textarea id = "show"> </textarea>
<Script language = "javascript">
<!-
// Длина этой строки сплайсинга - 100 байт Автор: Meizz
var str = "01234567891123456789212345678931234567894123456789";
STR+= "51234567896123456789712345678981234567899123456789/n";
// Метод 1
Функциональный метод1 ()
{
var result = "";
var totle = parseint (document.getElementbyId ("totle"). value);
var n = new Date (). getTime ();
для (var i = 0; i <totle; i ++)
{
результат += str;
}
document.getElementbyId ("show"). value = result;
var s = "Строка сплайсинга: сплайсированная большая строка длинная"+ result.length+ "Byte,"+
"Разделить время" + (новая дата (). Gettime ()-n) + "миллисекунды!";
document.getElementbyId ("method1"). innerHtml = s;
}
// Метод 2
Функциональный метод2 ()
{
var result = "";
var totle = parseint (document.getElementbyId ("totle"). value);
var n = new Date (). getTime ();
var a = new Array ();
для (var i = 0; i <totle; i ++)
{
a [i] = str;
}
result = a.join (""); a = null;
document.getElementbyId ("show"). value = result;
var s = "Присвоение массива.
"Разделить время" + (новая дата (). Gettime ()-n) + "миллисекунды!";
document.getElementbyId ("method2"). innerhtml = s;
}
//->
</Script>
Наконец, я скажу еще несколько слов. Будет ли в будущем все сплайсинги сплайсинга в будущем? Это зависит от ваших реальных потребностей. Нет необходимости использовать метод массива для обычных комбинаций нескольких байтов или K-уровня K, потому что также используются переменные массива открытия. Если существует более нескольких комбинаций струн, это означает, что массив эффективен.
Т.е. 6.0:
Метод сплайсинга струн: сплайсированная большая струна составляет 1010 000 байт, а сплайсинг занимает 22 089 миллисекунд!
Метод соединения массива: сплайсированная большая строка составляет длину 1010 000 байтов, и для сплайса требуется 218 миллисекунд!
Firefox 1.0:
Метод сплайсинга струн: сплайсированная большая струна составляет 1010 000 байт, а сплайсинг занимает 1044 миллисекунд!
Метод соединения массива: сплайсированная большая строка составляет 1010 000 байт, а сплайсинг занимает 1044 миллисекунд!
Мозилла 1.7:
Метод сплайсинга струн: сплайсированная большая струна составляет 1010 000 байт, а сплайсинг занимает 1045 миллисекунд!
Метод соединения массива: сплайсированная большая строка составляет 1010 000 байт, а сплайсинг занимает 1044 миллисекунд!
NetScape 7.0:
Метод сплайсинга струн: сплайсированная большая струна составляет 1010 000 байт, а сплайсинг занимает 10 273 миллисекунд!
Метод соединения массива: сплайсированная большая струна составляет 1010 000 байт, и для сплайса требуется 1138 миллисекунд!
Opera 7.54:
Метод сплайсинга струн: сплайсированная большая струна составляет 1010 000 байт, а сплайсинг занимает 6968 миллисекунд!
Метод соединения массива: сплайсированная большая строка составляет 1010 000 байт, а сплайсинг занимает 6922 миллисекунд!
Результаты испытаний 10000 циклов показывают, что эффективность может быть значительно повышена в IE и Netscape, в то время как в Operfox Mozilla Opera эти два метода занимают почти одно и то же время. Эти данные могут быть достаточными для определения того, что метод соединения массива лучше, чем традиционный сплайсинг строк.