Pull to refresh
45
0
Андрей Губанов @Finom

Веб разработчик

Send message
Это, конечно, оффтоп, но почему такое поведение? Допустим, я заэвалил этот код и V8, после этого, должен применить свои оптимизации, разве не так? Тело цикла, ведь, не эвалится на каждой итерации. Разница в скорости — 20 раз!

Дайте что-нибудь почитать, а то совсем чайником себя почувствовал впервые за последний год.
Хм, буду знать. На jsbin цифры совсем другие.
Хм, у меня разницы нет (учитывая небольшую погрешность).

xxx: 2805.133ms
yyy: 2799.653ms
Можете вычесть zzz из результатов:
window.it = [];
window.x = false;
console.time('xxx');
for(var i=0; i < 1e6; i++) {
x = typeof it == 'function';
}
console.timeEnd('xxx');

console.time('yyy');
for(var i=0; i < 1e6; i++) {
x = (typeof it)[7];
}
console.timeEnd('yyy');

console.time('zzz');
for(var i=0; i < 1e6; i++) {

}
console.timeEnd('zzz');
Затраты суммируются. По-вашему цикл «съедает» всё?
Окей, сдаюсь. Сделал typeof s == 'function'.

На уже упомянутом простеньком примере.
На jsperf не люблю ориентироваться. Лучше бенчмаркать такие вещи в консоли:
window.it = [];
window.x = false;
console.time('xxx');
for(var i=0; i < 1e6; i++) {
x = typeof it == 'function';
}
console.timeEnd('xxx');

console.time('yyy');
for(var i=0; i < 1e6; i++) {
x = (typeof it)[7];
}
console.timeEnd('yyy');

(разницы почти нет)
Может уж лучше потратить лишнюю сотню-другую символов и сделать функцию легко читаемой,
Идея в том, чтоб сжать функцию настолько сильно, насколько это возможно, в ущерб читаемости (как в js1k). Для остального есть jQuery-подобные крупные библиотеки или возможность форка для тех, кому очень надо.

быстрой
А что со скоростью не так? Напротив, применяется как можно меньше операторов и методов.

и без потенциальных проблем?

Какие потенциальные проблемы вы можете встретить сейчас?

Год-другой и будет доступны, например, SIMD и типизированые объекты со своим результатом typeof длиннее 7 букв.

Во-первых, как только SIMD появится в стабильной ветке хотя бы в одном браузере, этот момент будет учтен. Во-вторых это очень узкий юз-кейс. Я не представляю, кто может догадаться передать SIMD тип в эту функцию. В крайнем случае, вы получете ошибку float32x4 is not a function (или типа того) и в стеке увидете, где ошибка вызвана.
Всем, кто подписан на комментарии…

Во-первых, с Новым Годом. Во-вторых, функция дожата до 377 символов, что меньше чем код отслеживания Google Analytics.
Ей придется потолстеть немного, но ок. Пожалуй, и UMD нужно прикрутить, как в bala.
Я имею в виду, сколько бы ни было конкурентов в виде фреймворков, крутых и современных замен, jQuery всегда занимает свою нишу, потому что:
а) Она простая. Любой новичок, который знает CSS может с ней разобраться.
б) Она популярна.
в) Она предсказуема. Взять хотя бы делегированные события, которые невероятно сложно заставить работать так, как обычные события (например, заставить работать stopPtopagation так, как он работает с неделегированными событиями).

А всё остальное (в том числе и bala.js) — для тех, кого достало и для тех, кто хочет писать самый быстрый и самый контроллируемый код, т. е. для более-менее опытных разработчиков. Новички и консерваторы («бородатые» новички) будут на рынке веб разработки всегда.
За то пишете полезные комментарии.
Кстати, в защиту jQuery, за последние полгода я заюзал одну функцию из библиотеки — .parseHTML. Ни один парсер, в том числе, нативный (document.implementation.createDocument) не смог так точно распарсить HTML документ, как это сделал jQuery.

Честно говоря, я и предположить не мог, что мой пост вызовет столько срача с пожеланиями мне отправиться в больницу, обвинениями меня во вредительстве, вопросами «откуда вы такие беретесь». Любой инструмент нужно использовать тогда, когда в нём есть необходимость. Для 99% проектов нативный DOM выполняет свою задачу лучше, чем сторонняя библиотека. Это та мысль, которую мне хотелось донести.
Какой вред я принес, не поделитесь?
Пожалуй, уберу эту «шутку», извините за неё.
Спасибо за добрый комментарий. Об «убийце jQuery» это была шутка, прямо в начале поста есть приписка.
jQuery развивается сам по себе, никакой конкуренции нет. Предполагаю, что она будет в мейнстриме не меньше пяти лет.

Information

Rating
Does not participate
Location
Одесса, Одесская обл., Украина
Date of birth
Registered
Activity