ну ещёб, у тебя там ошибки в коде, в следующей итерации str будет уже старый и поэтому будет работать быстрее.

Код AS3:
package
{
import flash.display.Sprite;
import flash.text.TextField;
import flash.utils.getTimer;
import flash.utils.setTimeout;
/**
* @author SlavaRa
*/
public class Main extends Sprite
{
public static const COUNT:int = 1000000;
public function Main ()
{
super();
_field = new TextField();
_field.width = 800;
_field.height = 600;
addChild(_field);
setTimeout(runTests, 1000);
}
private function runTests ():void
{
testNubideus(); //testNubideus:7695
testMikroAcse(); //testMikroAcse:10034
testSlavaRa(); //testSlavaRa:7824
testNooob(); //testNooob:7493
}
private var _field:TextField;
private function testNubideus ():void
{
var str:String = "Привет %s, тебе сегодня исполнилось %d %s. Сегодня в %s день могут смотреть не %s. Не скучай, {0}!";
var func:Function = function (substr:String, i:uint, str:String):String {
switch (substr) {
case "%s": {return arr.shift();}
case "%d": {return arr.shift();}
}
};
var regexp:RegExp = /%s|%d/g;
var stamp:int = getTimer();
for (var j:int = 0; j < COUNT; j++)
{
var arr:Array = ["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
var result:String = str.replace(regexp, func);
}
_field.appendText("\ntestNubideus:" + (getTimer() - stamp));
}
private function testMikroAcse ():void
{
var arr:Array = ["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
var str:String = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
var stamp:int = getTimer();
for (var j:int = 0; j < COUNT; j++)
{
var result:String = str;
var len:int = arr.length;
for (var i:int = 0; i < len; i++)
{
result = result.split("{" + i + "}").join(arr[i]);
}
}
_field.appendText("\ntestMikroAcse:" + (getTimer() - stamp));
}
private function testSlavaRa ():void
{
var args:Vector.<String> = new <String>["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
var str:String = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
var stamp:int = getTimer();
for (var j:int = 0; j < COUNT; j++)
{
var result:String = str;
var length:int = args.length;
for (var i:int = 0; i < length; i++)
{
var pattern:String = "{" + i + "}";
while (result.indexOf(pattern) != -1)
{
result = result.replace(pattern, args[i]);
}
}
}
_field.appendText("\ntestSlavaRa:" + (getTimer() - stamp));
}
private function testNooob ():void
{
var args:Vector.<String> = new <String>["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
var str:String = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
var regExp:RegExp = /{(\w)}/g;
var replaceFunc:Function = function (substr:String, group:int, i:uint, str:String):String
{
return args[group];
}
var stamp:int = getTimer();
for (var j:int = 0; j < COUNT; j++)
{
var result:String = str.replace(regExp, replaceFunc);
}
_field.appendText("\ntestNooob:" + (getTimer() - stamp));
}
}
}