Для тех, кому интересно, вот несколько раз для предлагаемых решений ...
Rounding
Java Formatter: Elapsed Time: 105
Scala Formatter: Elapsed Time: 167
BigDecimal Formatter: Elapsed Time: 27
Truncation
Scala custom Formatter: Elapsed Time: 3
Усечение является самым быстрым, за которым следует BigDecimal. Имейте в виду, что эти тесты были выполнены с использованием нормального исполнения scala, а не с использованием инструментов бенчмаркинга.
object TestFormatters {
val r = scala.util.Random
def textFormatter(x: Double) = new java.text.DecimalFormat("0.##").format(x)
def scalaFormatter(x: Double) = "$pi%1.2f".format(x)
def bigDecimalFormatter(x: Double) = BigDecimal(x).setScale(2, BigDecimal.RoundingMode.HALF_UP).toDouble
def scalaCustom(x: Double) = {
val roundBy = 2
val w = math.pow(10, roundBy)
(x * w).toLong.toDouble / w
}
def timed(f: => Unit) = {
val start = System.currentTimeMillis()
f
val end = System.currentTimeMillis()
println("Elapsed Time: " + (end - start))
}
def main(args: Array[String]): Unit = {
print("Java Formatter: ")
val iters = 10000
timed {
(0 until iters) foreach { _ =>
textFormatter(r.nextDouble())
}
}
print("Scala Formatter: ")
timed {
(0 until iters) foreach { _ =>
scalaFormatter(r.nextDouble())
}
}
print("BigDecimal Formatter: ")
timed {
(0 until iters) foreach { _ =>
bigDecimalFormatter(r.nextDouble())
}
}
print("Scala custom Formatter (truncation): ")
timed {
(0 until iters) foreach { _ =>
scalaCustom(r.nextDouble())
}
}
}
}
Firefox 3.6.6 на моем 32-битном компьютере Win 7 становится медленным после 1 000 000 символов и полностью зависает после 4 000 000.
Хром падает где-то после 8 000 000.
IE8 падает где-то после 8 000 000 .
Safari падает где-то после 2 000 000.
В моем тестировании Chrome / IE8 / Safari не замедляются, так как размер увеличивается, как делает Firefox.
Я думаю, что это зависит от метода, с которым вы отправляете форму. Если вы отправляете форму через GET-метод, это всего лишь 255 символов для всего запроса (исправьте меня, если я ошибаюсь). POST-метод позволяет гораздо больше ...
Итак, в конце вы можете написать миллионы символов в текстовом поле, вопрос в том, будут ли все символы отправляться на сервер.
В HTML, однако, у вас есть возможность указать, сколько символов вы хотите разрешить. Посмотрите на этот фрагмент:
<input type="text" name="email" maxlength="255" />
Атрибут maxlength
тега запрещает пользователю вводить более 255 символов.
В текстовой области вы можете ввести неограниченное количество текста.
OK, на практике вам не следует вводить мегабайты текста или вы будете сталкиваться с ограничениями сервера.
Когда вы используете метод POST для отправки формы на сервер (что является обычным способом), тогда вы можете отправлять не менее мегабайт. Когда вы используете метод GET, вся форма переносится через строку запроса, и ограничения в тысячах символов (точное значение зависит от сервера и браузера).
Количество видимых символов зависит от размера элемента input
, но также от стиля этого элемента: широкий ящик, помещенный в мелкий контейнер (например, div
или form
), будет не показывать все символы в поле.
См. объяснение W3Schools на INPUT , обращая внимание на атрибуты size
и maxlength
. maxlength
указывает максимальную длину (в символах) поля ввода для типов «текст» или «пароль», size
указывает ширину поля ввода.
Я бы не подумал, что есть предел, если у кода нет чего-то, останавливающего его (параметр размера), или сервер не может принимать больше символов (либо много символов, либо плохой сервер).
Есть также 32-разрядные и т. д. ограничения, в зависимости от сервера, я считаю.
maxlength
. Размер предназначен только для визуальной ширины поля.
– Alex Sawallich
24 June 2010 в 08:51
Когда атрибут type имеет значение «текст» или «пароль», этот атрибут определяет максимальное количество символов, которое пользователь может ввести. Это число может превышать указанный размер, и в этом случае пользовательский агент должен предложить механизм прокрутки. Значение по умолчанию для этого атрибута - неограниченное число.
blockquote>Источник: http://www.w3.org/TR/html401/interact/forms.html#adef-maxlength