Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Извлечь из ссылки число (https://javascript.ru/forum/misc/23941-izvlech-iz-ssylki-chislo.html)

nerv_ 12.12.2011 21:20

Цитата:

Сообщение от Livanderiaamarum
но мой метод быстрее

С чего Вы взяли? :) Встроенные функции работают достаточно быстро, и хоть первый раз мой алгоритм был не вполне адекватен, он быстрее Вашего, по крайней мере в IE) Но в FF медленнее ^_^

p.s.: IE неадекватен. Разница с FF во времени исполнения ппц.
/**********************************************************/
var timer = (new Date()).getTime();
for(var i = 0; i < 100000; i++) {
	var x = "http://site.ru/load/38-1-0-138".split("-").pop();
}
alert((new Date()).getTime() - timer); // IE - 1109, FF - 75
/**********************************************************/
var timer = (new Date()).getTime();
for(var i = 0; i < 100000; i++) {
	var x = "http://site.ru/load/38-1-0-138";
	x = x.substring(x.lastIndexOf("-") + 1);
}
alert((new Date()).getTime() - timer); // IE - 375, FF - 11
/**********************************************************/
function lastNumber() {
	var _url = "http://site.ru/load/38-1-0-138";
	var _word = "-";
	var start;
	for(var i=_url.length-1; i >= 0; i--){
				if(_url.charAt(i) == _word){
					start = i;
					break;
				}
	}
	return _word = _url.slice(start+1);
}
//.........
var timer = (new Date()).getTime();
for(var i = 0; i < 100000; i++) {
	lastNumber();
}
alert((new Date()).getTime() - timer); // IE - 1281, FF - 20
/**********************************************************/
var timer = (new Date()).getTime();
for(var i = 0; i < 100000; i++) {
	var sa = 'http://site.ru/load/38-1-0-138'.match(/\d+$/)[0];
}
alert((new Date()).getTime() - timer); // IE - 1219, FF - 249

Nekromancer 12.12.2011 21:43

128
25
33
522

Linux.

trikadin 12.12.2011 22:03

57
14
65
203

Linux)

Livanderiaamarum 12.12.2011 22:59

С чего Вы взяли? Встроенные функции работают достаточно быстро, и хоть первый раз мой алгоритм был не вполне адекватен, он быстрее Вашего, по крайней мере в IE) Но в FF медленнее ^_^

function lastNumber(_url, _word){
			_word?_word=_word:_word = '-'
			var start //индекс вхождения
			for(var i=_url.length-1; i >= 0; i--){
						if(_url[i] == _word){
									start = i
									break
						}
			}
			return parseInt(_url.slice(start+1),10)
}




function qq(){
			var start = new Date().getTime();
			for(var i=0; i < 100000; i++){
						//lastNumber("http://site.ru/load/38-1-0-138")
						//parseInt("http://site.ru/load/38-1-0-138".split("-").pop(),10)
			}
			log(new Date().getTime() - start)
}
qq()


раскомментируйте по очереди строчки, мою и вашу) в моей 50 , в вашей 150 ;)

Nekromancer 12.12.2011 23:23

trikadin,
У меня нетбук ;)

trikadin 12.12.2011 23:31

Цитата:

Сообщение от Nekromancer
У меня нетбук

Так без претензий же) Это было просто для статистики.

Livanderiaamarum 12.12.2011 23:49

Цитата:

Сообщение от melky (Сообщение 142365)
//http://site.ru/load/38-1-0-138

function lastNumber(_url, _word){
			_word?_word=_word:_word = '-'
			var start
			for(var i=_url.length-1; i >= 0; i--){
						if(_url[i] == _word){
									start = i
									break
						}
			}
			return parseInt(_url.slice(start+1),10);
}



function lastNum2(str){
    return  (str=str.split())[str.length-1];
};
function lastNumber3 (str){
	return str.substring(str.lastIndexOf("-") + 1);
};



function lastNumber4(_url) {
	var _word = "-";
	var start;
	for(var i=_url.length-1; i >= 0; i--){
				if(_url.charAt(i) == _word){
					start = i;
					break;
				}
	}
	return _word = _url.slice(start+1);
}

var started;
var res = [];
var count = 1000000;
var i = 0;
var str = "http://site.ru/load/38-1-0-138";

started = Date.now();
for(i=0;i<count;i+=1) lastNumber(str, "-");
res.push( Date.now() -  started );

started = Date.now();
for(i=0;i<count;i+=1) lastNum2(str);
res.push( Date.now() -  started );

started = Date.now();
for(i=0;i<count;i+=1) lastNumber3(str);
res.push( Date.now() -  started );

started = Date.now();
for(i=0;i<count;i+=1) lastNumber4(str);
res.push( Date.now() -  started );

alert(res)


моя ф-я чуть медленней lastNumber3 в FF и намного быстрее её в chromium

ого, а моя у меня выдает 50, а другого парня 160-200, странно это как то О_О может для справедливость их нужно в разное время запускать? удивительные резльтаты))

melky 12.12.2011 23:50

bullshit

лучший вариант, по-моему мнению, от nerv_ (ф-я)

Livanderiaamarum, для тестировнаия скоростей есть замечательный сайт http://jsperf.com.
предлагаю его обкатать :)

devote 13.12.2011 00:27

пи**ками еще померьтесь

trikadin 13.12.2011 00:29

Цитата:

Сообщение от devote
пи**ками

Хера себе ты вежливый.


Часовой пояс GMT +3, время: 11:45.