Search
Write a publication
Pull to refresh
116
0
Send message
В общем-то, именно то, сколько скрипт займёт оперативки при свой работе, в этом конкурсе никто и не меряет. Ограничение в 13 кб стоит скорее на сетевой трафик. Причем, что забавно, условия приближены к «боевым»: большая часть серверов отдаёт браузеру html, css и js сжатыми в Deflate.

Но зачем это нужно, если скачать пару сотен мегабайт уже не составляет труда?

Чем меньше по весу страница, тем быстрее она грузится. Само по себе ограничение вынуждает веб-программиста познакомиться с минификацией ресурсов и оптимизацией картинок, практикам широко распространённым в «продакшне». Кроме того, это повод научиться писать краткие изящные алгоритмы и лучше узнать как сам язык, так и API, представляемый браузерами. Так что, сплошная польза.

Но это всё следствия. А причина — «Just for fun».
Тайл из 4 элементов («Жизнь») можно теоретически получить 8 разными способами, продумать всё это богатство алхимического выбора сложновато. Приходится по-Парацельсовски плодить гомункулюсов из семени и конского навоза.
Это что же, только ради многострочности на кофескрипт переходить?
Ну, во-первых, это хак. Изящный и, кстати, давно известный, но всё-таки хак.
И, кстати, помнится, то ли в старом файрфоксе, то ли в старом ИЕ комменты вырезались. На современных браузерах всё работает ок, но нет никакой гарантии, что так будет вечно. В спецификации английским по белому написано, что результат Function.prototype.toString — implementation specific.

Во-вторых, производительность. В то время, как люди меняю на jsperf микросекунды, тут накладные расходы на вызов функции и регулярку вообще не считаются.

Варианты выхода из ситуации:

Если вам нужно на стороне сервера сгенерировать что-либо в нотации JavaScript, можно использовать JSON. Даже само его название, «JavaScript Object Notation» как бы намекает. Тем более, поддерка на серверной стороне широчайшая — от PHP до Erlang,

Можно использовать экранирование символа переноса строки:
var myVar = "foo\
bar\
baz";

(Во, даже хабрапарсер правильно подсветил код!) Но предупреждаю, в спецификации про этот способ ни слова, опять-таки, 100% совместимость никто не гарантирует.

Вариант три: в ES6 уже есть поддержка строк с переносами. Вполне возможно, какой-нибудь Traceur это уже умеет.
Простите, но /regexp/.exec(fn.toString()) — это вообще в принципе не продакшн.
И всегда ищите кратчайшие пути — они сэкономят вам кучу времени.


Тут автор, похоже, под «shortcuts» имел в виду «keyboard shortcuts», «горячие клавиши».
Псевдоэлементы :before и :after по умолчанию имеют большее значение z-index, чем элемент, к которому они добавлены.


Псевдоэлементы :before и :after по умолчанию имеют значение z-index: auto, и ничем по поведению не отличаются от обычных дочерних элементов. Вы что-то неверно сформулировали?
Поправочка: «i» берётся из undefined, который [][[]]
никакой из обфускаторов так не сможет

Как же? Практически один-в-один происходит в jsfuck.

Там function выдёргивается через []["filter"], а сами символы f-i-l-t-e-r берутся из true и false, которые в свою очередь !![] и ![].
И эта проблема нерешаема в RegExp. В таких случаях нужен парсер.

Одна регулярка не поможет. А две — вполне.
Не, «velocity» — это скорость. Отличается от «speed» тем, что это векторная величина.
Ваша правда. При достаточно расхлябанной защите можно и сейчас увести админские куки или открыть админку в ифрейме, а такой метод давал бы слишком много удобства.

Но с другой стороны можно заложить необходимость явного включения автообнаружения для каждой вкладки, скажем, не выполнил window.Domain.enableAutoDiscovery(true), ссылку из другого окна не получишь.

Ещё один минус межвкладочного взаимодействия через ссылку на другое окно — возможность создать адскую утечку памяти, от которой даже F5 не спасёт. Но тут уже надо программисту просто знать, что он делает.
Эх, вы пропустили самую интересную часть — ручную минификацию.

По крайней мере, что бросается в глаза
— Оборачивание в IIFE можно смело вырезать.

f=30,g=Math.pow(2,f)-1 круто, но (1<<30)-1 короче.

Math.floor(n) для положительных чисел можно заменить n|0 или ~~n

for(w=2;5>=w;w++) то же самое, что for(w=1;5>w++;)

var a=0,b=0 можно сократить до a=b=0 (да, убрав var)
От оно как! Надо с самопингующими вёркерами поэкспериментировать, спасибо. Видимо, у них какие-то особые привилегии.

Согласен, ситуция с шаредами аховая. Но какой-нибудь метод вроде window.getSameDomainWindows(), желательно синхронный, и парочка событий были бы даже лучше. Как вы думаете, может стоит сделать proposal какой-нибудь Мозилле?
На этот случай есть хак:
При открытии вкладки (или по другому событию) она меняет свой window.name на какую-нибудь псевдо-уникальную строку и отсылает её через localStorage. Другие вкладки (если есть) ловят onstorage и запускают var hWnd = window.open("", "{{имя окна}}"), получая ссылку на её window.

Тут есть, конечно, куча ограничений, и самое главное из них — мобильный сафари, он замораживает неактивную вкладку, так что onstorage (и, если мне не изменяет память, даже банальный setTimeout) не выполнится, пока она не станет активной. Выходом из этого могли бы быть Shared Workers, но они тоже были выпилены из этого чудесного браузера.

"result = (" + fn.toString() + ")(d.data.Data);"


Как-то это неправильно. Не то, чтобы неэстетично, а вообще.

Держу пари, что если передать в качестве fn функцию, которая использует переменные из замыкания, на выходе получим трудноловимый баг.

А если таким аргументом будет любая функция, toString которой возращает "function () { [native code] }", например, результат Function.prototype.bind() в том же Хроме, результатом будет ошибка синтаксиса.
JS Python:

n = 0
while n - 100:
	n = -~n
	print (not n % 3 and 'Fizz' or '') + (not n % 5 and 'Buzz' or '') or n


Жаль, синтаксис не позволяет обернуть всё это в самовызывающуюся лямбду.
В Total Commander есть команды cm_CopyNamesToClip и
cm_CopyFullNamesToClip. Я их себе назначил на Ctrl-G и Ctrl-Shift-G, и давно позабыл про подобные ухищрения c dir.

Кстати, в том же Sublime Text есть мультивыделение, которое позволяет делать многое вообще без регулярок.

Минусы: обе эти утилиты, к сожалению, платные.

Information

Rating
8,615-th
Location
Ростов-на-Дону, Ростовская обл., Россия
Date of birth
Registered
Activity