somejs,
у меня вообще ваш тест по нулям периодически показывает. :D name time = 0 dataset time = 0 время настолько мало |
:write:
select.info fastest :) |
Цитата:
|
j0hnik,
протестируй select.info = ["a", "b", "c"] ; вместо select.dataset.info = "{'a':'a','b':'b','c':'c'}"; |
рони,
Быстрей. если ему видимость в атрибутах не нужна, вполне можно использовать. |
Спасибо за тэги - с ними я еще не разобрался.
Да, по 20-40 итераций делал и повторюсь, в отдельных файлах было, даже если менять местами в одном, то считывать с класса и резать быстрее. Тестирую на слабом (по нынешним меркам) железе. Где-то на 5-7 раз датасет работает как класс, а то и чуть быстрее, но даже при 40 итерациях среднее не дотягивает до класса. Все же датасет работает медленнее. Вот, статья, в которой это тоже упоминается: https://intuio.at/blog/dont-use-data...ments-with-js/ Меня удивили показания бенчмарка, ибо на реальной машине датасет не лидирует. Почему так происходит - не понятно. В целом, вы правы, на современных компьютерах это все милисекунды, которые не заметны, но ради оптимизации хотелось все же разобраться в этом. |
Цитата:
name time = 0 dataset time = 15.199999994365498 С итерацией в 50: name time = 0.20000000222353265 dataset time = 60.199999999895226 |
<html> <html> <body> <p id="p1"></p> <p id="p2"></p> <p id="p3"></p> <script type="text/javascript"> var select = document.createElement("select"); select.classList.add("a-b-c"); select.id = "s"; select.dataset.info = ["a", "b", "c"]; select.info = ["a", "b", "c"]; document.body.appendChild(select); var el = document.getElementById('s'); var p2 = performance.now(); for (var i = 0; i < 100000; i++) el.dataset.info; s2 = performance.now() - p2; var p1 = performance.now(); for (var i = 0; i < 100000; i++) el.className.split("-"); s1 = performance.now() - p1; var p3 = performance.now(); for (var i = 0; i < 100000; i++) el.info; s3 = performance.now() - p3; document.getElementById('p2').innerHTML="dataset time = "+s2; document.getElementById('p1').innerHTML="name time = "+s1; document.getElementById('p3').innerHTML="info = "+s3; </script> </body> </html> //======================== хром name time = 20.700000000942964 dataset time = 10.800000003655441 info = 1.5999999959603883 //======================== FF name time = 4.284999999999997 dataset time = 12.164999999999992 info = 1.2399999999999807 |
somejs, походу вы в FF тестируете, а я в хром вот результаты и отличаются
|
Ой, извиняюсь. Да, - timex (правка при слиянии, добавил х, чтобы не было вмешательств).
Так получается при 70: name time = 0.09999999747378752 dataset time = 0.09999999747378752 В принципе, разницы нет. Спасибо за ссылку на бенчмарк, кстати. |
Часовой пояс GMT +3, время: 07:33. |