Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Оптимизация конструкции (https://javascript.ru/forum/offtopic/24123-optimizaciya-konstrukcii.html)

greatilya 19.12.2011 15:12

Подвожу итоги сравнения двух функций в данной задаче:

1. strtr
$trans = array("hello" => "hi", "hi" => "hello");
echo strtr("hi all, I said hello", $trans);

Результат средний: ~0.53 секунды

2. str_replace
$b = array('en'=>'английский','ru'=>'русский');
$a = array_keys($b);
echo str_replace($a,$b,'Этот ваш en язык, нужен для того, чтобы говорить по ru');

Результат средний: ~40.81 секунды

Различие на лицо. Напомню какие были исходные данные:
строка размером порядка 1.5-2Мб в которую поставляется массив из 7282 элементов.

Gozar 19.12.2011 15:42

greatilya,
А по отдельности что выдает:
array_keys($b); и str_replace($a,$b,'Этот ваш en язык, нужен для того, чтобы говорить по ru');
?

Сейчас глянул более подробно и лучше так как я предложил не делать, дабы не получить инкрементальность, хотя я не знаю твоей задачи полностью, но все же. Это когда уже замененные фрагменты будут заменены на новые. Поэтому str_replace так долго работает. Если тест выдаст 40 секунд на str_replace, то значит строка прогоняется с заменой каждый раз на каждый ключ массива.

greatilya 19.12.2011 18:39

Цитата:

Сообщение от Gozar
А по отдельности что выдает:
array_keys($b); и str_replace($a,$b,'Этот ваш en язык, нужен для того, чтобы говорить по ru');

array_keys - я не учитывал в замере.
Замерял только работу strtr и str_replace, всё другое по времени получалось достаточно быстро и для меня не критично.

Цитата:

Сообщение от Gozar
Если тест выдаст 40 секунд на str_replace, то значит строка прогоняется с заменой каждый раз на каждый ключ массива.

да, именно так и получается.

Цитата:

Сообщение от Gozar
хотя я не знаю твоей задачи полностью

задача относительно проста:
- имеется мультиязычный сайт, с теоретической поддержкой 42 языков
-выбирая какие-то данные из БД, вместо строк подставляются лишь идентификаторы строк из таблицы LANG
- после регуляркой мы выдираем из страницы все идентификаторы и делаем соответствующий запрос с таблице LANG, который наполняет наш массив с данными.
- ну а после вставляем наши данные заменой на страницу
- выводим страницу на экран

melky 19.12.2011 19:53

вывод : в php, не как в js, есть смысл залать по справочникам (лучше держать вкладку с ним) и выискивать встроенные функции. со временем тот хренов список сам запомнится.

Gozar 19.12.2011 20:03

Цитата:

Сообщение от melky (Сообщение 144518)
вывод : в php, не как в js, есть смысл залать по справочникам (лучше держать вкладку с ним) и выискивать встроенные функции. со временем тот хренов список сам запомнится.

Я считаю что эффективнее будет написать:
вывод : и в php, и в js, есть смысл ...

melky 19.12.2011 22:45

Цитата:

Сообщение от Gozar (Сообщение 144522)
Я считаю что эффективнее будет написать:
вывод : и в php, и в js, есть смысл ...

мм. скажу вам, что недавно сравнивали встроенную функцию и велосипед. последний оказался быстрее. к сожалению, не могу назвать ни темы, ни встроенной функции.

у меня - "пустая болтовня", так скажем. как наткнусь - покажу.


Часовой пояс GMT +3, время: 00:54.