Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 30.05.2017, 23:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

j0hnik,
ошибок нет, и вполне достаточно, но можно и без while, код будет длиннее, но без лишних генераций, что производительнее.
Ответить с цитированием
  #12 (permalink)  
Старый 30.05.2017, 23:14
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от рони Посмотреть сообщение
j0hnik,
ошибок нет, и вполне достаточно, но можно и без while, код будет длиннее, но без лишних генераций, что производительнее.
напишите как вы видите =)

еще можно если переменные равны прерывать функцию и запускать заново. но вроде цикл лучше в плане производительности.
Как вы производительность оцениваете? может сервис какой есть?
Ответить с цитированием
  #13 (permalink)  
Старый 30.05.2017, 23:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от j0hnik
Как вы производительность оцениваете?
если повторения не нужны, зачем их генерировать? скрипт будет "ждать" пока rand == rand2 - сервис https://jsperf.com/
<!DOCTYPE html>

<html>
<head>
  <meta charset="utf-8">
</head>
<body>
  <div id="id" style="display: block; width: 200px; height: 200px; border: 1px solid grey;"></div>
  <script>
function rand(a) {
    a = a.slice(0);
    var c = a.length - 1;
    return function() {
        var b = Math.floor(Math.random() * c),
            b = a.splice(b, 1)[0];
        a.push(b);
        return b
    }
};
  var color = ['red','green','blue','orange','yellow','violet','cyan'];
  var r = rand(color);
    document.getElementById("id").onmouseover = function(){
    this.style.backgroundColor = r();
  };
</script>
</body>

</html>
Ответить с цитированием
  #14 (permalink)  
Старый 31.05.2017, 00:05
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Спасибо за ссылку =) буду тестить!
Ответить с цитированием
  #15 (permalink)  
Старый 31.05.2017, 00:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от j0hnik
буду тестить!
с while в данном случае не критично, на 100 генераций будет примерно 5-8 лишних.
Ответить с цитированием
  #16 (permalink)  
Старый 31.05.2017, 00:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

количество повторов на 100 генераций
j0hnik,
var rand2, rand;
    var n = 0;
    for (var i=0; i<100; i++)  { rand = Math.floor(Math.random() * 6);if(rand2==rand)n++; rand2=rand}
    alert(n);

Последний раз редактировалось рони, 31.05.2017 в 00:15.
Ответить с цитированием
  #17 (permalink)  
Старый 31.05.2017, 02:41
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Рони друг мой я протестил:
и вот какие результаты
1место скрипт пост 7
2место -10% пост 10
3 место -66% твой скрипт
МБ я что нитак сделал. (прокоментируй пжл)
https://jsperf.com/do

на счет первого скрипта я согласен подход не совсем правильный (есть косяк который немного увеличивает вероятность выпадения соседнего цвета, а в остальном вроде никакую опасность не несет)
Ответить с цитированием
  #18 (permalink)  
Старый 31.05.2017, 03:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

j0hnik,
пост №7 -- обращается к несуществующим элементам массива.
пост №10 от 5 до 20 % лишних генераций.
пост №13 количество повторов и ошибок на 100 генераций ноль!!! по скорости не знаю, что быстрее.
Ответить с цитированием
  #19 (permalink)  
Старый 31.05.2017, 03:14
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от рони Посмотреть сообщение
j0hnik,
обращается к несуществующим элементам массива.
почему? мы же сначала отняли 1 поэтому потом можем добавить и не вылетим за рамки color.length
Ответить с цитированием
  #20 (permalink)  
Старый 31.05.2017, 03:31
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от j0hnik
почему?
потому что когда rand2 === rand и rand = 6 то ++rand будет 7 --- а элемента с таким индексом нет

исправленный вариант

<head>
  <meta charset="utf-8">
</head>
<body>
  <div id="id" style="display: block; width: 200px; height: 200px; border: 1px solid grey;"></div>
  <script>
  var rand2;
    document.getElementById("id").onmouseover = function(){
    var color = ['red','green','blue','orange','yellow','violet','cyan']
    var rand = Math.floor(Math.random()*color.length);
    if (rand2 === rand) rand = ++rand%color.length;
    this.style.backgroundColor = color[rand];
    rand2 = rand;
  };
</script>
</body>

Последний раз редактировалось рони, 31.05.2017 в 03:35.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как добавить класс к нужному элементу при наведении на определеные ссылки? crazygangster77 Events/DOM/Window 3 05.06.2013 02:19
Скрипт не работает при заходе на данную страницу, но работает при рефреше страницы foker jQuery 0 26.11.2012 12:27
Смена нескольких картинок при наведении Demoni Элементы интерфейса 8 28.04.2012 23:57
изменения рисунка при наведении курсора Kenan Bek Events/DOM/Window 24 19.12.2010 20:48
jQuery поменять CSS цвет для текста при наведении мышью (.text:hover) JooZ jQuery 16 15.11.2010 19:56