MDN предупреждает, что максимальная длина массива, передаваемая в Function.prototype.apply, ограничена (порядка 10^4). Меня заинтересовали точные значения, которые я определяю вот таким скриптом.
4 сент. 2013 г.
30 июл. 2013 г.
Глубина стека JavaScript в разных браузерах
Скрипт для измерения глубины стека и результаты (получены на одном компьютере, Windows 7 SP1, 64-bit):
Chrome 28: 20966 - 21000, не зависит от количества открытых вкладок
Firefox 20: 26000 - 50000, сильно изменяется от измерения к измерению
Firefox 22: 38000 - 53000, сильно изменяется от измерения к измерению
Opera 12.16: 32629, не зависит от количества открытых вкладок
Opera 15: 20968, не зависит от количества открытых вкладок
IE10: 2946 - 2947, не зависит от количества открытых вкладок, включения/выключения отладки JavaScript, выбора Browser Mode/Document Mode
IE9 (IETester): 20670, не зависит от количества открытых вкладок
Chrome 28: 20966 - 21000, не зависит от количества открытых вкладок
Firefox 20: 26000 - 50000, сильно изменяется от измерения к измерению
Firefox 22: 38000 - 53000, сильно изменяется от измерения к измерению
Opera 12.16: 32629, не зависит от количества открытых вкладок
Opera 15: 20968, не зависит от количества открытых вкладок
IE10: 2946 - 2947, не зависит от количества открытых вкладок, включения/выключения отладки JavaScript, выбора Browser Mode/Document Mode
IE9 (IETester): 20670, не зависит от количества открытых вкладок
IE8 (IETester): 1472 - 1475, не зависит от количества открытых вкладок
IE7 (IETester): 2546 - 2548, не зависит от количества открытых вкладок
IE6 (IETester): 2546 - 2548, не зависит от количества открытых вкладок
Результаты для IE на разных компьютерах различаются на два порядка, на одной из машин в IE9 была получена глубина стека 42329, на другой для IE8 (IE9 downgraded to IE8) было всего 276 (!).
8 июл. 2013 г.
UnderGet - Download Blocked Files
UnderGet - Download Blocked Files
UnderGet allows you to download files that are otherwise blocked by a firewall or other tool at your work, school or country.
UnderGet can bypass blocks that prevent you from downloading files based on their file type, extension or content by renaming the file or encoding its content so the blocking software can not detect it.
UnderGet allows you to download files that are otherwise blocked by a firewall or other tool at your work, school or country.
UnderGet can bypass blocks that prevent you from downloading files based on their file type, extension or content by renaming the file or encoding its content so the blocking software can not detect it.
5 июл. 2013 г.
Hardware acceleration flags in Firefox
- Open about:config tab
- Search for azure
gfx.canvas.azure.backends direct2d,skia,cairo
gfx.content.azure.backends direct2d
gfx.content.azure.enabled true - Search for direct2d (Windows)
gfx.direct2d.disabled false - Search for directwrite
gfx.font_rendering.directwrite.enabled true - Search for layers
layers.acceleration.disabled false
layers.acceleration.draw-fps false
layers.acceleration.force-enabled false
layers.async-video.enabled false
layers.composer2d.enabled false
layers.offmainthreadcomposition.animate-opacity false
layers.offmainthreadcomposition.animate-transform false
layers.offmainthreadcomposition.log-animations false
layers.prefer-d3d9 false
layers.prefer-opengl false - Also check for gfx.content
CSS 3D demo
18 июн. 2013 г.
Find jQuery events on specific element
$._data($element[0], 'events');
will return all event handlers
$._data($element[0]);
will return all jQuery data (set by $(element).data(key, value)) and event handlers (set by $(element).on(eventName, handler)) for this element
Example in Chrome's console:
Object {events: Object, handle: function, data: Object}
- data: Object
uiProgressIndicator: $.(anonymous function).(anonymous function)
__proto__: Object - events: Object
click: Array[3]
remove: Array[1]
__proto__: Object - handle: function ( e ) {
arguments: null
caller: null
elem: body
length: 1
name: ""
prototype: Object
__proto__: function Empty() {}
<function scope> - __proto__: Object
We can see data for jQuery UI widget named 'progressIndicator' and four event handlers (three for 'click', one for 'remove' event) attached to the body of the HTML document.
Also Chrome has built-in command getEventListeners to show DOM event handlers attached to element:
> getEventListeners(document.body)
Object {click: Array[1], remove: Array[1]}
- click: Array[1]
- remove: Array[1]
- __proto__: Object
23 мая 2013 г.
Век живи - век учись: создание и заполнение коллекции через Double Brace Initialization
Как в Java одним выражением создать поле с коллекцией (List, Set и т.п.) или Map и заполнить коллекцию начальными значениями (не создавая в классе дополнительных методов/инициализаторов/конструкторов)?
15 апр. 2013 г.
git rerere
Если у вас в репозитории Git появляется долгоживущая ветка, и вы регулярно делаете rebase на активно развивающийся master branch, то очень скоро заметите, что при следующем rebase приходится решать те же конфликты, которые уже были решены во время предыдущего rebase.
2 апр. 2013 г.
Samsung Galaxy Tab 2: WiFi "Not in Range"
Обнаружилась (и в конце концов решилась) неприятная проблема с WiFi у Samsung Galaxy Tab 2 7.0 (GT-P3113). Он упорно не хотел обнаруживать исправную точку доступа WiFi, с которой не первый день без проблем работали другие устройства: ноутбук, планшет на Android 4.0, планшет Blackberry. Даже после добавления точки доступа вручную, будучи на расстоянии полуметра от неё, планшет отмечал её в списке как "Not in Range".
Похожие проблемы можно найти в интернет, но чёткого решения или хотя бы описания причины нигде не было. У кого-то не виделась или пропадала домашняя точка доступа, хотя оставались видны все соседские точки, у кого-то не находилась точка в аэропорту/кафе, хотя рядом с ней работали другие устройства и т.п.
Как выяснилось, Galaxy Tab 2 не видит точки доступа, если она находится выше 11 канала в диапазоне 2.4ГГц (она может быть настроена на 12 или 13 канал вручную или выбрать их самостоятельно как наименее занятые или наиболее чистые от шумов). Как только я перегнал точку доступа на 9-й канал, Galaxy Tab 2 тут же обнаружил её и подключился без проблем - не понадобились даже перезагрузки точки доступа и планшета.
Похожие проблемы можно найти в интернет, но чёткого решения или хотя бы описания причины нигде не было. У кого-то не виделась или пропадала домашняя точка доступа, хотя оставались видны все соседские точки, у кого-то не находилась точка в аэропорту/кафе, хотя рядом с ней работали другие устройства и т.п.
Как выяснилось, Galaxy Tab 2 не видит точки доступа, если она находится выше 11 канала в диапазоне 2.4ГГц (она может быть настроена на 12 или 13 канал вручную или выбрать их самостоятельно как наименее занятые или наиболее чистые от шумов). Как только я перегнал точку доступа на 9-й канал, Galaxy Tab 2 тут же обнаружил её и подключился без проблем - не понадобились даже перезагрузки точки доступа и планшета.
27 мар. 2013 г.
DOM performance comparison: jQuery vs Prototype
http://jsperf.com/dom-attributes/3
Скорость работы с атрибутами элементов DOM (вызовов в секунду)
UserAgent read remove writeProto jQuery Proto jQuery Proto jQuery
Chrome 25.0.1364 1,863K 1,046K 842K 177K 375K 499K
Firefox 19.0 1,137K 774K 452K 108K 191K 207K
IE 8.0 34K 55K 29K 27K 24K 38K
IE 9.0 528K 267K 472K 130K 268K 205K
Opera 12.14 1,159K 744K 438K 223K 295K 448K
Скорость работы с классами элементов DOM (вызовов в секунду)
UserAgent add has remove
Proto jQuery Proto jQuery Proto jQuery
Chrome 25.0.1364 985K 400K 611K 922K 638K 2,908K
Firefox 19.0 457K 392K 255K 419K 458K 1,167K
IE 8.0 20K 31K 15K 62K 23K 95K
IE 9.0 363K 159K 246K 365K 223K 929K
Opera 12.14 518K 410K 300K 560K 511K 1,366K
Chrome 25.0.1364 985K 400K 611K 922K 638K 2,908K
Firefox 19.0 457K 392K 255K 419K 458K 1,167K
IE 8.0 20K 31K 15K 62K 23K 95K
IE 9.0 363K 159K 246K 365K 223K 929K
Opera 12.14 518K 410K 300K 560K 511K 1,366K
http://jsperf.com/dom-events
Скорость работы с событиями (вызовов в секунду)
UserAgent fire on/off
Proto jQuery Proto jQueryAndroid 4.0.4 2,565 662 1,530 1,955
Chrome 25.0.1364 128,277 28,647 69,639 94,823
Firefox 19.0 35,793 13,892 53,441 39,665
IE 8.0 5,389 4,691 5,032 10,384
IE 9.0 68,532 19,681 55,858 70,473
Opera 12.14 48,960 3,283 102,913 85,031
13 мар. 2013 г.
5 редко используемых функций underscore.js
- _.result(object, property) - получение значения поля/функции по имени (для поля возвращается его значение, для метода возвращается результат его выполнения)
- _.random([min=0], max) - целое случайное число в диапазоне [min, max] или [0, max]
- _.has(object, key) - безопасная проверка на hasOwnProperty (object.hasOwnProperty(key) может вернуть неверный результат в случае перекрытия hasOwnProperty, например так: var object = {hasOwnProperty: function() {return false;}})
- _.tap(object, interceptor) - эквивалент кода interceptor(object); return object; (для встраивания в call chain вызова функций, не поддерживающих chaining)
- _.compose(*functions) - композиция декораторов (иногда помогает развернуть иерархию вызовов типа a(b(c(x))))
6 февр. 2013 г.
JBoss AS 7.1.1 Final JSP Auto Deploy
Исправление для ошибки с редеплоем изменённых JSP в JBoss AS 7.1.1 Final (обсуждение на форуме)
24 янв. 2013 г.
Поддержка HTML5 draggable и contenteditable браузерами
На словах всё прекрасно (поддерживается всеми современными версиями браузеров, включая IE9), а на деле при попытке использовать эти возможности HTML5 даже в простеньком приложении сразу натыкаешься на, мягко говоря, "особенности реализации".
22 янв. 2013 г.
Какие действия заставляют браузер вычислять layout (делать reflow)
В своей канонической статье Stoyan Stefanov подробно рассмотрел, что такое reflow, как он влияет на плавность работы интерфейса веб-приложения, какими инструментами производить анализ и как минимизировать количество reflow. Он привёл краткий список свойств и методов, вызов которых заставляет браузер вычислять layout (делать reflow):
- offsetTop, offsetLeft, offsetWidth, offsetHeight
- scrollTop, scrollLeft, scrollWidth, scrollHeight
- clientTop, clientLeft, clientWidth, clientHeight
- currentStyle (IE), getComputedStyle() (остальные браузеры)
19 янв. 2013 г.
Способность реализовать фичу в проекте
Там, где я работаю сейчас, официально считается, что "один разработчик - одна фича". Что из этого следует:
Подписаться на:
Сообщения (Atom)