Цитата:
|
Цитата:
Цитата:
Конечно для мелких сайтиков эта оптимизация не значительна, и не особо требуется. Но все же нужно уметь и знать как обходится без регулярных выражений. И при возможности их не использовать. |
devote,
К тому же, во первых, по поводу перфоманса еще можно поспорить. Во вторых, код с регулярками тоже может быть оптимизирован var url = 'file:///d:/w.o.r.d.doc'; i=1000000 console.time('my stupid') while(i--){ url.match(/\.([a-z]+)$/i)[1] } console.timeEnd('my stupid') i=1000000 re=/\.([a-z]+)$/i console.time('my better') while(i--){ url.match(re)[1] } console.timeEnd('my better') i=1000000 console.time('yours') while(i--){ var ext = (ext = url.split('.')).length > 1 ? ext.pop() : ''; } console.timeEnd('yours') //в ноде: // my stupid: 423ms // my better: 401ms // yours: 425ms В третих, во большинстве случаев можно обойтись тестом, а матчить только в поседнюю очередь. А так по любому будет быстрей. Цитата:
Цитата:
|
devote,
Цитата:
|
вот никогда бы не додумался делать split'ом
|
TimohaP,
постоянно так делаю, чтобы регулярки не писать :D |
TimohaP,
Ага, выручает в примитивных случаях, типа вашего, или, например, alert("1111/2222/3333/4444".split("/").reverse().join("/")) Но шаг вправо -- наг влево, alert("1111222233334444".replace(/(1+)(2+)(3+)(4+)/, "$4$3$2$1")) и уже облом. и даже вот это 1111/2222/3333/4444/ вы за*тесь реверсить сплитом Так что особо не расчитывайте на него, в плане работы с текстом. Хотя в js split -- мощная, и юзабельная конструкция, она много че может, это да. |
devote,
var url = "file:///d:/w.o.r.d.doc"; console.time("time1"); var ext1 = url.split('.').pop(); console.log(ext1); console.timeEnd("time1"); console.time("time2"); var ext2 = url.slice(url.lastIndexOf(".") + 1); console.log(ext2); console.timeEnd("time2"); Цитата:
var url = "file:///d:/w.o.r.d.doc"; console.time("time2"); var ext2 = url.slice(url.lastIndexOf(".") + 1); console.log(ext2); console.timeEnd("time2"); console.time("time1"); var ext1 = url.split('.').pop(); console.log(ext1); console.timeEnd("time1"); Цитата:
в ff34 всегда разница в 0.01-0.02 ms |
Цитата:
var url = "file:///d:/w.o.r.d.doc"; alert((ext = url.lastIndexOf('.')) !== -1 ? url.substr(ext + 1) : ''); bes, уже предложил его выше) var url = "file:///d:/w.o.r.d.doc"; i=1000000 re=/\.([a-z]+)$/i console.time('my better') while(i--){ var ext = url.match(re)[1] } console.log(ext); console.timeEnd('my better') i=1000000 console.time('yours') while(i--){ var ext = (ext = url.lastIndexOf('.')) !== -1 ? url.substr(ext + 1) : '' } console.log(ext); console.timeEnd('yours') |
Цитата:
Парсинг текста без регулярок может стать хорошим интеллектуальным упражнением, (правда, тут больше подходит не сахар языка, а что нибудь более суровое, например, обработка и перебор списков), но практического значения это не имеет. |
Часовой пояс GMT +3, время: 10:18. |