@proGO

Страница 205 из 1674
Daniel
28.08.2016
18:52:42
это время на поиск

Kirill
28.08.2016
18:52:42
2+ секунды против 32 мс

Daniel
28.08.2016
18:52:47
а

Google
Daniel
28.08.2016
18:52:59
не увидел разные единицы

Nik
28.08.2016
18:53:09
а что там за data?
это просто html файл

открыл и перегнал в []byte

у меня из-за этого парсер люто тупил

Vladislav
28.08.2016
18:53:49
В тему выбора IDE ?

Nik
28.08.2016
18:54:11
ты сравниваешь поиск по строке и байтам, а со строками включаешь в цикл еще и конвертацию в строку
а в любом случае у меня есть только два метода ползовать регексп. Знаешь третий - подскажи

Kirill
28.08.2016
18:54:38
у тебя есть вариант вынести, наконец, конвертацию за цикл

Nik
28.08.2016
18:56:31
это не четсно будет

Kirill
28.08.2016
18:56:39
чтоооооо?

Nik
28.08.2016
18:56:46
потому что в живой проге data каждый раз новая

и затраты на конвертацию тоже важны

Kirill
28.08.2016
18:57:08
ты сравниваешь поиск или конвертацию?

и затраты на конвертацию тоже важны
ни разу. у тебя данные могут быть и так в строке.

Google
Nik
28.08.2016
18:57:44
нет, данные всегда - ответ от http resp

Kirill
28.08.2016
18:58:28
то есть ты не можешь regexp'ом искать по чему-либо еще?

что-то у тебя тест для остальных выходит бесполезным просто потому, что ты не хочешь вынести конвертацию за цикл и не видишь, что тут не так.

Nik
28.08.2016
18:59:56
так. я сейчас допер, что проиграл с единицами измерения

Daniel
28.08.2016
19:01:44
за цикл надо и сомпиляцию регекспа

Kirill
28.08.2016
19:02:03
вообще да

Daniel
28.08.2016
19:02:17
и вот что интересно - после выноса за цикл обеих этих вещей - время перестает зависеть от количества итераций

из чего мы заключаем, что тест все-таки фуфло :)

Kirill
28.08.2016
19:02:44
я сейчас не пробовал

Nik
28.08.2016
19:02:45
hel stringSubmatch 49.927151ms byteSubmatch 29.223972ms

это конвертация наружу

stringSubmatch 29.155639ms byteSubmatch 27.232028ms

это регекспом снаружи

Daniel
28.08.2016
19:03:19
а это компиляция

можешь теперь увеличить число итераций 100 раз

ничего не измениться

Nik
28.08.2016
19:03:47
увеличил

изменилось

fmt.Println("stringSubmatch") start := time.Now() stringData := string(data) lol := regexp.MustCompile("action=\"./(.*?)\"") for i := 0; i < 100000; i++ { _ = lol.FindStringSubmatch(stringData)[1] //_ = regexp.MustCompile("action=\"./(.*?)\"").FindStringSubmatch(string(data))[1] } fmt.Println(time.Since(start)) fmt.Println("byteSubmatch") start2 := time.Now() for i := 0; i < 100000; i++ { _ = lol.FindSubmatch(data)[1] } fmt.Println(time.Since(start2))

Google
Nik
28.08.2016
19:04:05
stringSubmatch 1.759711915s byteSubmatch 2.390604181s

Daniel
28.08.2016
19:05:05
"action=\”./(.*?)\””, кстати, лучше писать как \action=”./(.*?)”\

тупой тут md

Nik
28.08.2016
19:06:06
экранирование отдельно ест вермя?

боль

Daniel
28.08.2016
19:06:11
какая версия go?

нет, экранирование ничего не ест

Nik
28.08.2016
19:06:38
1.7

Daniel
28.08.2016
19:06:43
просто есть же кавычки “обратный апостроф”

Nik
28.08.2016
19:07:06
не пользовал раньше, буду знать

@proDOT
28.08.2016
19:07:33
``

Daniel
28.08.2016
19:11:23
итого - после выноса конвертации и компиляции оба метода демонстрируют идентичную производительность

Daniel
28.08.2016
19:11:28
я не удивлен

Kirill
28.08.2016
19:11:31
stringSubmatch, 100000000 iterations 30.759199888s byteSubmatch, 100000000 iterations 30.537851386s

Nik
28.08.2016
19:12:08
тогда я копать дальше где у меня тупит

спасиб больше за подсказки)

Kirill
28.08.2016
19:12:20
package main import ( "fmt" "regexp" "time" ) const ( iterations = 100000000 regexpString = `action="./(.*?)"` ) func main() { data := []byte(`<!DOCTYPE html><html><form action="/"></form></html>`) fmt.Printf("stringSubmatch, %d iterations\n", iterations) start := time.Now() stringData := string(data) lol := regexp.MustCompile(regexpString) for i := 0; i < iterations; i++ { _ = lol.FindStringSubmatch(stringData) } fmt.Println(time.Since(start)) fmt.Printf("byteSubmatch, %d iterations\n", iterations) start2 := time.Now() for i := 0; i < iterations; i++ { _ = lol.FindSubmatch(data) } fmt.Println(time.Since(start2)) }

Daniel
28.08.2016
19:12:23
единственное, что мы выяснили - FindStringSubmatch читерит, и использует подлежащий массив байт от строки, а не конвертацию

коллеги, а как правильно парсить вот такое время? 2016-08-24 11:46:44 Etc/GMT [12:47] я придумал строку 2006-01-02 15:04:05 Etc/MST [12:47] но чет не уверен, что она правильная

Nikolay
30.08.2016
10:25:08
@onokonem приветствую! [12:47] - это постоянное значение? Очень интересный формат, откуда?

Google
Nikolay
30.08.2016
10:29:44
Хех, с телефона [12:47] показывает в одну строку со временем, а с десктопа виден перевод строки -(

Nikolay
30.08.2016
10:30:20
Прямо через \n ?

Daniel
30.08.2016
10:30:44
Прямо через \n ?
а, не, это цитата из слака

Nikolay
30.08.2016
10:30:51
ух

Admin
ERROR: S client not available

Daniel
30.08.2016
10:31:24
а в чём проблема? о_0
плейсхолдер таймзоны (MST) не понимает этого формата

Daniel
30.08.2016
10:32:44
еще раз - мне его вернул таким apple store. выбора нет

Vladislav
30.08.2016
10:34:32
плейсхолдер таймзоны (MST) не понимает этого формата
чуть попроще можно? не может GMT -> MST?

Daniel
30.08.2016
10:35:46
коллега, а вы уверены, что знаете, как работает форматтер времени в стандартной либе go?

есть вормат таймзоны Etc/GMT

есть плейсхолдер для него - MST

не для этого формата конкретно, а для тектового описания таймзоны вообще

так вот - формат MST не понимает формата Etc/GMT

сейчас я написал костыль Etc/MST

но если вдруг эппл вернет мне таймзону без Etc/ - у меня не распарсится время

а узнать мне об этом будет довольно сложно

потому как, скорее всего, единственным внешним эффектом будет пользовательское “я че это я покупаю, а оно не покупается”

Google
Daniel
30.08.2016
10:39:25
придется, видимо, вкорячить метрику, и на нее повесить алерт

Phil
30.08.2016
10:39:44
Я думаю никто не знает что такое Etc/GMT. Например я

Daniel
30.08.2016
10:40:07
гугл знает, но от этого не легче

Phil
30.08.2016
10:40:35
Ну просто ты бы мог вкратце намекнуть.

Andrew
30.08.2016
10:41:23
таймзона нет?

Daniel
30.08.2016
10:42:51
да, такая вот странная таймзона

Vladislav
30.08.2016
10:45:53
я все таки так и не понял, что прилетает от эппл? входящие данные в Etc/MST?

просто если я правильно понял, то почему в примере перепутаны между собой зоны?

Daniel
30.08.2016
12:15:16
:)

а почитайте, правда, как в го устроен парсинг даты-времени

Denis
30.08.2016
12:17:48
Ничего другого не придет

Можно реплейсом заменять etc/GMT на GMT, либо как у вас

* лучше будет отбрасывать непосредственно Etc/ часть

Vladislav
30.08.2016
12:36:34
а почитайте, правда, как в го устроен парсинг даты-времени
я то почитаю, но проблему это не решит... не хотите доступно объяснить - ОК

Daniel
30.08.2016
12:36:34
ну вот я написал шаблон, который работает

ока пусть будет он

и метрику с алертом тоже впилю, конечно

хотя правильные метрики - это боль

Страница 205 из 1674