Недавно, при исследовании «Advanced Programming JavaScript», существует описание характеристик строк. Оригинальный текст примерно следующим образом: строки в Ecmascript неизменны, то есть после создания строк их значения не могут быть изменены. Чтобы изменить сохраненную строку переменной, сначала уничтожите исходную строку, а затем заполните переменную другой строкой, содержащей новое значение, например:
Кода -копия выглядит следующим образом:
var lang = "java";
lang = lang + "script";
Процесс реализации этой операции заключается в следующем: сначала создайте новую строку, которая может содержать 10 символов, а затем заполнить ее "Java" и "Script" в этой строке. Последний шаг - уничтожить оригинальные струны «java» и «сценарий», потому что эти две строки бесполезны. Однако в нижних версиях браузеров (например, IE6) скорость сплайсинга струн является процессом, обслуживающей производительность.
Из этого я думаю о Java. Механизм струн в Java похож на JS (то есть его нельзя изменить после создания, и изменить его может разрушить только исходное значение), но у Java есть StringBuffer, который решает проблему неподвижности строки, и JS не имеет аналогичного метода. Но мы можем имитировать этот буферный механизм. Принцип состоит в том, чтобы использовать массивы для сплайсинга, исходный код заключается в следующем:
Кода -копия выглядит следующим образом:
функция stringBuffer () {
это .__ Strings__ = new Array ();
}
Stringbuffer.prototype.append = function (str) {
это .__ Строки __. push (str);
вернуть это; // Удобная работа цепочки
}
Stringbuffer.prototype.tostring = function () {
вернуть это .__ Строки __. Join ("" ");
}
/*тест*/
var buffer = new StringBuffer ();
buffer.append ("hello"). Append ("javaScript");
var result = buffer.toString ();
предупреждение (результат);
PS: Адрес GIST выглядит следующим образом: https://gist.github.com/hehongwei44/fe71f10e4d2d9295aeab
Мы смоделировали механизм, но существует разница в производительности между этим методом и сплайсингом строки. Мы можем проверить это, и тестовый код заключается в следующем:
Кода -копия выглядит следующим образом:
var d1 = новая дата ();
var str = "";
для (var i = 0; i <10000; i ++) {
str += "text";
}
var d2 = новая дата ();
document.write ("test One Stop:" + (d2.getTime () - d1.gettime ())/1000 + "секунды" + "<br/>");
var obuffer = new StringBuffer ();
d3 = новая дата ();
для (var i = 0; i <10000; i ++) {
obuffer.append ("text");
}
var sresult = obuffer.toString ();
d4 = новая дата ();
document.write («Проверьте две расходы:» + (d4.gettime () - d3.gettime ())/1000 + «секунды»);
Результаты теста следующие: (результаты теста могут отличаться в разных средах):
1. При сравнении 1000 раз в качестве основания, выполнение обоих очень быстро (основные миллисекунд) и занимает примерно одно и то же время. Последнее различие между первыми не превысит 10 миллисекунд.
2. В 10 000 раз в качестве базы результат исполнения аналогичен вышеуказанному, но у первого есть больше телефонных счетов в IE6.
3. В 100 000 раз по мере того, как основание, сплайсинг в IE6, очевидно, занимает больше времени, а другие браузеры не сильно отличаются, а некоторые - короче, чем StringBuffer.
в заключение
1. Когда количество слов сплайсинга составляет менее 1000 раз, смело используйте первое, и мы редко сталкиваемся с тысячами времени сплайсинга.
2. У других браузеров нет проблем с производительностью со сплайсингом, в основном IE6. Если время сплайсинга стоит десятков тысяч или сотен тысяч, рекомендуется использовать StringBuffer для моделирования только IE6.