Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Генератор ID-строки на PHP. Код. Можно оптимизировать по скорости? / 7 сообщений из 7, страница 1 из 1
31.10.2011, 00:30
    #37504645
berminga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генератор ID-строки на PHP. Код. Можно оптимизировать по скорости?
Сабж. Код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 function  generateId($len)
{
    $letters="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

    $str = "";
     for  ( $i =  0 ; $i < $len; $i = $i+ 1  )
        $str = $str.$letters[  rand ()% 62  ];

     return  $str;
}
...
Рейтинг: 0 / 0
31.10.2011, 00:51
    #37504651
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генератор ID-строки на PHP. Код. Можно оптимизировать по скорости?
навскидку - использовать какой-нибудь StringBuffer или StringBuilder для этого вашего пхп, чтоб с каждой итерацией не создавался новый объект-строка.

а что возвращает rand()? если целое число, то можно добавить ещё пару символов и вместо деления юзать поразрядное "И" (rand() & 63)
...
Рейтинг: 0 / 0
31.10.2011, 01:00
    #37504653
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генератор ID-строки на PHP. Код. Можно оптимизировать по скорости?
mt_rand нужно использовать
...
Рейтинг: 0 / 0
31.10.2011, 01:02
    #37504656
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генератор ID-строки на PHP. Код. Можно оптимизировать по скорости?
Изопропилmt_rand нужно использоватьЕще дольше будет.
...
Рейтинг: 0 / 0
31.10.2011, 01:33
    #37504671
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генератор ID-строки на PHP. Код. Можно оптимизировать по скорости?
berminga,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
[an0nym@localhost ~]$ cat test.php 
<?php
 switch  ($argv[ 1 ])
{
   case  'berminga':
     function  generateId($len)
    {
      $letters="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
      
      $str = "";
       for  ( $i =  0 ; $i < $len; $i = $i+ 1  )
        $str = $str.$letters[  rand ()% 62  ];

       return  $str;
    }
     break ;
   case  'an0nym':
     function  generateId($length)
    {
      $alphabet = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
      $alphabet_length =  62 ;
       return   substr ( str_shuffle ( str_repeat ($alphabet,  ceil ($length / $alphabet_length))),  0 , $length);
    }
     break ;
}

 const  LENGTH_MAX =  1024 ;
 const  TRIES =  1000000 ;

 for  ($length =  1 ; $length <= LENGTH_MAX; $length *=  2 ) {
  $start =  microtime ( true );
   for  ($i =  0 ; $i < TRIES; ++$i)
    generateId($length);
  $end =  microtime ( true );

   echo  $length, "\t", $end - $start, "\n";
}
[an0nym@localhost ~]$ php test.php berminga
 1 	 1 . 2689220905304 
 2 	 1 . 8100938796997 
 4 	 2 . 7736878395081 
 8 	 4 . 8485329151154 
 16 	 8 . 8386499881744 
 32 	 16 . 961936950684 
 64 	 33 . 190233945847 
^C
[an0nym@localhost ~]$ php test.php an0nym
 1 	 3 . 6046829223633 
 2 	 3 . 5677490234375 
 4 	 3 . 624372959137 
 8 	 3 . 6216700077057 
 16 	 3 . 5305140018463 
 32 	 3 . 6543760299683 
 64 	 4 . 8884370326996 
 128 	 6 . 240996837616 
 256 	 9 . 3746719360352 
 512 	 14 . 413372039795 
 1024 	 24 . 756990909576 
...
Рейтинг: 0 / 0
31.10.2011, 01:39
    #37504674
berminga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генератор ID-строки на PHP. Код. Можно оптимизировать по скорости?
Вах. Завтра пойму, что это такое. Спасибо.
...
Рейтинг: 0 / 0
31.10.2011, 01:45
    #37504678
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генератор ID-строки на PHP. Код. Можно оптимизировать по скорости?
Для больших строк более эффективен будет fallback на fread /dev/urandom, но если под указанный алфавит кое-что еще можно придумать быстрое (base64 + str_replace), то под другой алфавит будет сложнее и не факт, что быстрее реализации через str_repeat и str_shuffle.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Генератор ID-строки на PHP. Код. Можно оптимизировать по скорости? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]