Самый быстрый GUID, как метод генератора строк в формате XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
. Это не создает стандартно-совместимый GUID.
Десять миллионов исполнений этой реализации занимают всего 32,5 секунды, что является самым быстрым из всех, что я когда-либо видел в браузере (единственное решение без циклов / итераций).
Функция такая же простая, как:
/**
* Generates a GUID string.
* @returns {String} The generated GUID.
* @example af8a8416-6e18-a307-bd9c-f2c947bbb3aa
* @author Slavik Meltser (slavik@meltser.info).
* @link http://slavik.meltser.info/?p=142
*/
function guid() {
function _p8(s) {
var p = (Math.random().toString(16)+"000000000").substr(2,8);
return s ? "-" + p.substr(0,4) + "-" + p.substr(4,4) : p ;
}
return _p8() + _p8(true) + _p8(true) + _p8();
}
Чтобы проверить производительность, вы можете запустить этот код:
console.time('t');
for (var i = 0; i < 10000000; i++) {
guid();
};
console.timeEnd('t');
Я уверен, что большинство из вы поймете, что я там сделал, но, возможно, есть хотя бы один человек, которому потребуется объяснение:
Алгоритм:
Math.random()
возвращает десятичную число между 0 и 1 с 16 цифрами после точки десятичной дроби (например, 0.4363923368509859
). 0.6fb7687f
). Math.random().toString(16)
. 0.
(0.6fb7687f
=> 6fb7687f
) и получим строку с восемью шестнадцатеричными символами. (Math.random().toString(16).substr(2,8)
. Math.random()
возвращает более короткое число (например, 0.4363
), из-за нулей в конце (из приведенного выше примера фактически число 0.4363000000000000
). Вот почему я добавляю к этой строке "000000000"
(строка с девятью нулями), а затем отрезаю ее функцией substr()
, чтобы сделать ее девятью символами (заполнение нулей вправо). Math.random()
вернет ровно 0 или 1 (вероятность 1/10 ^ 16 для каждого из них). Вот почему нам нужно было добавить к нему девять нулей ("0"+"000000000"
или "1"+"000000000"
), а затем отрезать его от второго индекса (3-й символ) длиной до восьми символов. Для остальных случаев добавление нулей не повредит результату, потому что оно все равно отключает его. Math.random().toString(16)+"000000000").substr(2,8)
. Сборка:
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
. XXXXXXXX
и -XXXX-XXXX
. XXXXXXXX
-XXXX-XXXX
-XXXX-XXXX
XXXXXXXX
. _p8(s)
, параметр s
сообщает функция, добавить ли тире или нет. _p8() + _p8(true) + _p8(true) + _p8()
и возвращаем его. Ссылка на этот пост в моем блоге
Наслаждайтесь! : -)
Поскольку я не знаю, какова цель вашего заявления, не могу сказать много.
Но если вы хотите сделать SSR с React , я рекомендую вам взглянуть на эту структуру https://github.com/zeit/next.js [110 ], используйте его в качестве внешнего интерфейса и паруса в качестве API.
nextjs имеет богатые документы и множество примеров, вы можете использовать его, не касаясь сервера, или с вашим собственным сервером, таким как Express, Hapi, Koa.