Я провел несколько тестов. Первый метод немного быстрее, но его недостаточно для того, чтобы что-то изменить даже при интенсивном использовании ... за исключением , когда sCompOp
потенциально может быть очень длинной строкой. Поскольку первый метод ищет строку фиксированной длины, его время выполнения очень стабильно, независимо от того, сколько времени получает sCompOp
, тогда как второй метод потенциально выполняет итерацию по всей длине sCompOp
.
Кроме того, второй метод будет потенциально соответствовать недопустимым строкам - "бла-бла-бла <= бла-бла" удовлетворяет критерию ... </p>
Учитывая, что вы, вероятно, выполняете работу по разбору оператора в другом месте, я сомневаюсь, что любой крайний случай будет проблемой. Но даже если бы это было не так, небольшая модификация выражения решит обе проблемы:
/^(>=|<=|<>)$/
Код тестирования:
function Time(fn, iter)
{
var start = new Date();
for (var i=0; i<iter; ++i)
fn();
var end = new Date();
console.log(fn.toString().replace(/[\r|\n]/g, ' '), "\n : " + (end-start));
}
function IndexMethod(op)
{
return (",>=,<=,<>,".indexOf("," + op + ",") != -1);
}
function RegexMethod(op)
{
return /(>=|<=|<>)/.test(op);
}
function timeTests()
{
var loopCount = 50000;
Time(function(){IndexMethod(">=");}, loopCount);
Time(function(){IndexMethod("<=");}, loopCount);
Time(function(){IndexMethod("<>");}, loopCount);
Time(function(){IndexMethod("!!");}, loopCount);
Time(function(){IndexMethod("the quick brown foxes jumped over the lazy dogs");}, loopCount);
Time(function(){IndexMethod("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");}, loopCount);
Time(function(){RegexMethod(">=");}, loopCount);
Time(function(){RegexMethod("<=");}, loopCount);
Time(function(){RegexMethod("<>");}, loopCount);
Time(function(){RegexMethod("!!");}, loopCount);
Time(function(){RegexMethod("the quick brown foxes jumped over the lazy dogs");}, loopCount);
Time(function(){RegexMethod("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");}, loopCount);
}
timeTests();
Протестировано в IE6, FF3, Chrome 0.2.149.30