
Kirill
28.08.2016
18:52:28

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
открыл и перегнал в []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

Vladislav
30.08.2016
10:28:11

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

Daniel
30.08.2016
10:30:09

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

Daniel
30.08.2016
10:30:44

Nikolay
30.08.2016
10:30:51
ух

Admin
ERROR: S client not available

Daniel
30.08.2016
10:31:24

Paul
30.08.2016
10:32:19

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

Vladislav
30.08.2016
10:34:32

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
ну вот я написал шаблон, который работает
ока пусть будет он
и метрику с алертом тоже впилю, конечно
хотя правильные метрики - это боль