
ainu
27.03.2017
21:01:46
по разным папкам?
что gramework, что fasthttp их делает

Kirill
27.03.2017
21:02:07
слишком уж хороший прирост, чтобы от этого отказываться)

Google

ainu
27.03.2017
21:02:56
выгода прироста понятна
непонятно почему не /tmp

Kirill
27.03.2017
21:03:30
ну — не хочешь файликов .gz — не включай компрессию)
на ext4 и xfs

ainu
27.03.2017
21:04:11
это уже просто любопытство, может там дао скрыто
быстрее чем /tmp?
то есть tmpfs же там, оперативка и все такое

Kirill
27.03.2017
21:05:10
быстрее — мы проверили состояние файла и забрали .gz из той же директории
и ты не понял идею
мы отдаём с диска файлы, которые уже были запрошены, но не были запрошены достаточно недавно, чтобы они остались в памяти
тогда мы из такого вот персистентного кеша отдаём)


ainu
27.03.2017
21:14:53
Это у меня зашор от пхп пошел. Привык что есть папка вроде uploads или storage - в нее права на запись, и она меняется. Или /tmp. Остальные директории нетленны, зачастую у запускающего юзера (nginx/apache и т.д.) даже прав на изменения нет. Изменения через git pull например.
и обычно в папках /js не появляется js.gz - так как нет прав на запись. Исключения бывает - например редактор tinymce имеет пакер, создающий gzip файл в директории с яваскриптом.
Когда надо сделать кеш - в папке cache создается.
Например для файла /app/foo/bar.js - /cache/app/foo/bar.js.gz
Идея в том, что cache почистить можно целиком всю. При этом она помещается в .gitignore, а директория js на вопрос git status ответит "всё чисто, изменений нет".
Но когда речь о скорости, тут конечно слов нет.

Google

Kirill
27.03.2017
21:16:53
можно опцию сделать, в принципе
это из коробки я хочу сделать максимальную производительность
хочешь замедлить — делай что-нибудь типа изменения настроек %)


ainu
27.03.2017
21:18:18
лишний if - 0.3 наносекунды
а если опция в оперативке, то 10

Kirill
27.03.2017
21:19:58
понятное дело, if будет при инициализации, а не в хендлере

ainu
27.03.2017
21:21:04
ServeDirNoCacheCusomWithGzFilesInTmp
нет, не стоит
Кому надо Middleware сделает
В конце концов
@kirilldanshin только что заметил
https://godoc.org/github.com/gramework/gramework#App.ServeDirNoCacheCusom буквы t не хватает

Kirill
27.03.2017
21:26:48
фублеать %))
хотя
кому надо — есть поддержка func(ctx *fasthttp.RequestCtx)
могут взять и сделать что угодно

Google

Kirill
27.03.2017
21:30:18

ainu
28.03.2017
07:05:58
@kirilldanshin У греймворка есть лимит на одновременное подключение?
Паника падает, если раз 3-4 в секунду запросить вот такое:
app.GET("/api/test/*list", func(ctx *gramework.Context) {
tableName := ctx.RouteArg("list")[1:]
if err := ctx.JSON(tableName); err != nil {
ctx.Err500()
}
})
slice bounds out of range
т.е. иногда RouteArg("list") отличается
Споймал.
на 12-м обновлении страницы вместо "sd" вывел ""

Kirill
28.03.2017
07:11:48
Интересно, такого не происходило ни разу
Посмотрю, спасибо

ainu
28.03.2017
07:16:51
это я F5 нажимал

ainu
28.03.2017
07:17:19
то есть 5.5 секунд, 19 запросов

Kirill
28.03.2017
07:17:37
А это уж совсем странно

ainu
28.03.2017
07:50:24
https://pastebin.com/Yps6xrWa
ОТкрываем http://localhost:8089/asd
видим "/asd"
Нажимаем F5 раз 20 - видим ""

Kirill
28.03.2017
07:51:19
А вот есть routearg, который с ошибкой

Google

Kirill
28.03.2017
07:51:33
Посмотри - он что-то ловит?

ainu
28.03.2017
07:53:14

Kirill
28.03.2017
07:53:32
Я понял)
Я сейчас не у компа просто.

ainu
28.03.2017
07:54:06
val, err := ?

Kirill
28.03.2017
07:55:40
Угу

Admin
ERROR: S client not available

ainu
28.03.2017
07:57:03
есть
Сейчас сам покопаюсь

Quet
28.03.2017
07:58:08
ainu, а зачем взял именно этот фреймворк, есть же которые давно в продакшене и без детских болезней

Kirill
28.03.2017
07:59:30
Принято, спасибо. Странно, что на линупсе такого не ловится.

ainu
28.03.2017
08:00:27

Quet
28.03.2017
08:01:05
го и "острие технологий" в одном предложении это смешно
понятно )

ainu
28.03.2017
08:05:24
c.UserValue(argName) == nil

Kirill
28.03.2017
08:06:52
вообще — можно сделать RouteArg уже иначе, роутер-то теперь внутри

Google

Kirill
28.03.2017
08:10:05
можно напрямую класть в/брать из контекста
будет шустрее и стабильнее

ainu
28.03.2017
08:11:15
Нашёл =)
В fasthttprouter scnfdbk
вставил
case catchAll:
fmt.Println ("Debug: ", n.path, path)
fmt.Println ("Hits: ",n.hits)
Вывел hits:32
чуть ниже по коду есть
n.hits++
if n.hits > 32 {
n.router.cache.Put(reqPath, n, tsr)
}
return
Дело в этой части. число 32 не просто так
fasthttprouter_tree.go, func (n *node) GetValue, swith CatchAll:

Kirill
28.03.2017
08:12:48
ага. понял.
сейчас пофикшу.

ainu
28.03.2017
08:14:04
ЧИсто из любопытства - 32 и кеш что это такое?

Kirill
28.03.2017
08:14:35
кеш — это, собственно, кеш горячих роутов

Oleksandr
28.03.2017
08:14:53
шикарное именование

ainu
28.03.2017
08:15:51
Если закомментировать
if n.hits > 32 {
n.router.cache.Put(reqPath, n, tsr)
}
то все станет норм, но я понимаю что это неправильно.
т.е. если я одним роутом пользуюсь 1000 раз в секунду, а вторым раз в год, то первый будет быстрее отрабатывать?

Kirill
28.03.2017
08:16:45

ainu
28.03.2017
08:16:50
Круто=)

Kirill
28.03.2017
08:17:47
catchall неудобно кешировать сейчас