Во-первых, удобство: лямбды легче читать и записать.
118-секундный, выражения: лямбды могут быть скомпилированы в или делегат, или дерево выражений (Expression<T>
для некоторого типа делегата T, такой как Func<int,bool>
). Деревья выражений являются более захватывающим, поскольку это - ключ к LINQ к хранилищам данных из процесса.
Func<int,bool> isEven = i => i % 2 == 0;
Expression<Func<int,bool>> isEven = i => i % 2 == 0;
Примечание, что лямбда-выражения с телами оператора могут только быть скомпилированы в делегатов, не Expression
с:
Action a = () => { Console.WriteLine(obj.ToString()); };
С точки зрения HTML 4, атрибуты являются конструкцией SGML. Их пределы определены в SGML-декларации HTML 4 :
QUANTITY SGMLREF ATTCNT 60 -- increased -- ATTSPLEN 65536 -- These are the largest values -- LITLEN 65536 -- permitted in the declaration -- NAMELEN 65536 -- Avoid fixed limits in actual -- PILEN 65536 -- implementations of HTML UA's -- TAGLVL 100 TAGLEN 65536 GRPGTCNT 150 GRPCNT 64
Здесь рассматривается значение "ATTSPLEN", которое будет пределом для списка спецификации атрибутов элемента (который должен быть общим размером всех атрибуты для этого элемента). В примечании выше упоминается, что следует избегать фиксированных ограничений, поэтому вполне вероятно, что в большинстве реализаций нет реального ограничения, кроме доступной памяти.
HTML 5, похоже, отличается от spec говорит: «Таким образом, эта версия HTML возвращается к основе, отличной от SGML».
Позже, при описании синтаксического анализа HTML 5, появляется следующий отрывок ( курсив добавлен):
Описанный ниже алгоритм помещает без ограничений на глубину дерева DOM сгенерировано, или на длине тега имена, имена атрибутов, атрибут значения , текстовые узлы и т. д. Пока разработчикам рекомендуется избегать произвольные ограничения, это признано что практические проблемы, вероятно, заставить пользовательские агенты вводить вложенность ограничения глубины.
Итак, я полагаю, это ваш ответ.
Я только что написал test , который помещает строку длиной 10 миллионов в атрибут, а затем снова извлекает ее, и он отлично работает (Firefox 3.5.2 и Internet Explorer 7)
50 миллионов заставляют браузер зависать с сообщением «Этот сценарий занимает много времени для завершения».
Я действительно не думаю, что есть предел. Теперь я знаю, что вы можете использовать
<a onclick=" //...insert 100KB of javascript code here">
, и он отлично работает. Хотя немного нечитабельно.
From Синтаксис HTML5 doc
9.1.2.3 Атрибуты
Атрибуты для элемента выражается внутри начала элемента tag.
Атрибуты имеют имя и значение. Имена атрибутов должны состоять из одного или больше символов, кроме пробела символы, U + 0000 NULL, U + 0022 ЦИТАТНЫЙ ЗНАК ("), U + 0027 АПОСТРОФ ('), U + 003E БОЛЬШЕ, ЧЕМ ЗНАК (>), U + 002F SOLIDUS (/) и U + 003D РАВНО SIGN (=) символы, управляющие персонажи и любые символы, которые не определены Unicode. в HTML-синтаксис, имена атрибутов могут быть написано любым сочетанием нижнего и прописные буквы, которые являются ASCII соответствие без учета регистра имя атрибута.
Значения атрибутов представляют собой смесь текста и ссылки на символы, кроме дополнительное ограничение, которое текст не может содержать двусмысленные амперсанд.
Атрибуты можно указать в четырех разными способами:
Пустой синтаксис атрибута
Синтаксис значения атрибута без кавычек
Синтаксис значения атрибута в одинарных кавычках
Синтаксис значения атрибута в двойных кавычках
Здесь не упоминается ограничение на размер значение атрибута. Так что я думаю, что их не должно быть.
Вы также можете проверить свой документ с помощью
Я никогда не слышал о каких-либо ограничениях на длину атрибутов.
В спецификациях HTML 4.01, в разделе атрибутов , нет ничего, что упоминало бы какие-либо ограничения на это.
То же самое в HTML 4.01 DTD - на самом деле, насколько мне известно, DTD не позволяет вам указывать длину атрибутов.
Если в HTML 4 об этом нет ничего, я не воображайте, что что-то подобное появится для HTML 5 - и я на самом деле не вижу никаких ограничений длины в разделе 9.1.2.3 Атрибуты для HTML 5.
Из http://dev.w3.org/html5/spec/Overview.html#embedding-custom-non-visible-data :
Каждый HTML элемент может иметь любое количество заданных пользовательских атрибутов данных с любым значением.
То, что используется для синтаксического анализа / обработки этих значений атрибутов data- *, будет иметь ограничения.
Оказывается, атрибуты данных и значения помещаются в объект DOMStringMap. Это не имеет внутренних ограничений.
Из http://dev.w3.org/html5/spec/Overview.html#domstringmap :
Примечание. Определение интерфейса DOMStringMap здесь предназначено только для JavaScript среды. Привязки других языков должны будут определить, каким будет DOMStringMap. реализован для этих языков
DOMStringMap - это интерфейс с геттером, сеттером, великором и удалителем. У установщика есть два параметра типа DOMString, имя и значение. Значение имеет тип DOMString, который отображается непосредственно в строку JavaScript.
Из http://bytes.com/topic/javascript/answers/92088-max-allowed-length-javascript-string:
Максимальная длина строки JavaScript зависит от реализации.
[примечание: Chrome сообщает о bytes.com как об источнике вредоносного ПО, будьте осторожны]
SGML определяет атрибуты с ограниченным набором символов в 65 тыс. Символов, как показано здесь: http://www.highdots.com/forums/html/length-html-attribute-175546.html
Хотя то, что вы делаете, у вас должно быть хорошо. Что касается верхних пределов, я видел, как jQuery использует атрибуты данных, которые также содержат несколько k данных.