@gogolang

Страница 176 из 1630
ainu
11.03.2017
20:38:47
Другое дело время компиляции - оно выше сильно.

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

Он отдавал заголовки заставляющие браузер кешировать. При этом иногда отдавал пустой файл.

Kirill
11.03.2017
20:40:22
Google
ainu
11.03.2017
20:40:45
Причем датой изменения ставит левую дату. Что мешает отладке.

ainu
11.03.2017
20:41:55
В инспекторе заголовок даты изменения, да. Обычный заголовок, любой http сервер его отдвет

Через stx.response.header.set можно поставить pragma: no csche

Но дата будет скакать, неизменная

Т.е. не поставить допустим далекое прошлое чтобы запретить кеширование

Kirill
11.03.2017
20:44:06
Смотрел я на fasthttp, такая шляпа
ну — что я тебе скажу. у меня весь прод на fasthttp и ни одной проблемы с ним не было. ты написал полную дичь, которая работает неадекватно, так что не надо втирать людям что то, в чем ты не разобрался настолько, что не смог отдать файлик — шляпа.

другой вопрос — покажи конкретно код, который ты написал и используемый коммит fasthttp, как и git status в нем.

ainu
11.03.2017
20:45:07
Мне как бы все равно у кого что на прод работает

Я заменил на net/http и кейс ctrl + s, alt + tab, f5 стал работать в 100% случаев, а не 95.

ainu
11.03.2017
20:47:05
Но так как такая движуха, я подниму старую версию, и сделаю воспроизведение того, про что говорю

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

Google
ainu
11.03.2017
20:49:38
Мы же говорим про https://github.com/valyala/fasthttp ?

Yura
11.03.2017
22:02:37
В ряде случаев просто не отдает контент, пока f5 не нажмешь раз 10
А на хрена ж вы fasthttp для страничек используете? Он для API, а не для полновесных страниц.

Yura
11.03.2017
22:07:17
у меня там и полновесные страницы
Я могу быть не прав, т.к. опыта не имею с fasthttp. Я ориентируюсь на его же высказывания в README: net/http handles more HTTP corner cases. И, если у тебя полновесная страница с кучей бизнес-логики и десятком походов в базу, нафига экономить на спичках? А вот если легковесное api, которое делает одну-две простых операций, то там имеет смысл каждый такт экономить.

Повторюсь: я могу быть не прав.

Все уже видели? http://www.tapirgames.com/blog/golang-syntax-sugars-and-exceptions

N
11.03.2017
23:44:53
Я могу быть не прав, т.к. опыта не имею с fasthttp. Я ориентируюсь на его же высказывания в README: net/http handles more HTTP corner cases. И, если у тебя полновесная страница с кучей бизнес-логики и десятком походов в базу, нафига экономить на спичках? А вот если легковесное api, которое делает одну-две простых операций, то там имеет смысл каждый такт экономить.
разделяю твое мнение частично. для api стоит использовать в случаях высокой нагрузки ради экономии ресурсов, времени и то без фанатизма, чтобы не заниматься преждевременной оптимизацией. в остальных случаях смысла не вижу брать это. Отдавать статику, странички и прочее лучше через штатный http - там хоть http2 есть, кроме этого много сторонних библиотек и фреймворков используют штатный. Лично я брать это буду в крайнем случае, когда приспичит и не смогу ни горизонтально отмаштабироваться и ничего другого, когда трата времени на использование этой штуки и всех рисков с этим связанных будет оправдана. А так когда работы мало, а времени много можно брать и это, писать свои фреймворки поверх и пилить на нем все подряд, замеряя наносекунды и радуясь как все быстро, только как правило задержки на сети, на базе и тд на практике съедают больше времени чем реализация http и разницы там использовать http или fasthttp особо то и никакой.

Kirill
11.03.2017
23:46:51
разделяю твое мнение частично. для api стоит использовать в случаях высокой нагрузки ради экономии ресурсов, времени и то без фанатизма, чтобы не заниматься преждевременной оптимизацией. в остальных случаях смысла не вижу брать это. Отдавать статику, странички и прочее лучше через штатный http - там хоть http2 есть, кроме этого много сторонних библиотек и фреймворков используют штатный. Лично я брать это буду в крайнем случае, когда приспичит и не смогу ни горизонтально отмаштабироваться и ничего другого, когда трата времени на использование этой штуки и всех рисков с этим связанных будет оправдана. А так когда работы мало, а времени много можно брать и это, писать свои фреймворки поверх и пилить на нем все подряд, замеряя наносекунды и радуясь как все быстро, только как правило задержки на сети, на базе и тд на практике съедают больше времени чем реализация http и разницы там использовать http или fasthttp особо то и никакой.
в целом соглашусь, но мне проще так — я так могу код спокойно переиспользовать между проектами и не париться о переносе

Stanislav
12.03.2017
07:51:28
Доброе утро) Как поведут себя тысячи спящих горутин? Я создаю горутину, ложу её в сон на NN минут. Через NN минут горутина должна удалить объект, если он не удален ранее. Или какой есть еще способ отслеживания жизнь кучи объектов поминутно?

Andrew
12.03.2017
07:53:35
Другой способ - для кучи создать доп. поле с датой "когда удалить". Далее таймером перебирать допустим, каждые 5 сек, все объекты и смотреть дату.

Stanislav
12.03.2017
07:56:01
Даже если поставить перебор каждую минуту - неужели будет ефективней перебор тысячи объектов, чем запускать горутины, которые должны будут удалять через НН минут объект?

Andrew
12.03.2017
07:57:49
Я просто предложил другой способ, об эффективности не знаю...

Stanislav
12.03.2017
08:31:17
конечно интересно

Yura
12.03.2017
08:32:26
А почему не добавлять элемент в список (слайс) со временем удаления? Как я понимаю, время удаления будет монотонно расти. Тогда одной горутиной можно спокойно этот список обрабатывать. Также можно тупо использовать time.AfterFunc .

Но таймер - это на случай, если время удаления растет не монотонно. В монотонном случае список лучше.

N
12.03.2017
08:39:19
конечно интересно
для своей задачи, хоть она и отличается несколько от твоей я делал следующее: взял обычную реялизацию сбалансированного дерева, описал функцию сортировки дерева (дерево хранится всегда в отсортированном виде) в которой у меня было несколько полей еще кроме времени - фактически ключ индекса был составной. так вот тк дерево отсортировано встаем в начало дерева и берем первый элемент - если время пришло то удаляем его из дерева, если не пришло то дальше и не бежим по дереву а спим какое-то время. можно прибить эту горутину которая это делает к системному треду с помощью LockOSThread чтобы не думать что где-то что-то затупило и горутинка не проснулась во время после сна, но и плюсом я делал очень просто: бежал по дереву до тех пор пока время «протухания» было истинным, но это нужно если время сна например 5сек а обьекты могут протухать с частотой в 1 сек.

Google
N
12.03.2017
08:42:20
из минусов мы имеем более долгие операции вставки, удаления и тд с деревом если сравнивать с слайсом, но если нужена конкурентная вставка и большого кол-ва а-ля сотни-миллионы, то это работает

Yura
12.03.2017
08:50:17
А зачем дерево? Heap!

Угадай, как таймеры в Go работают? Используют heap.

Но это нужно, если время удаления не строго "текущее время + константная дельта", т.е. если может быть произвольным. В противном случае, лучше просто список.

N
12.03.2017
09:04:12
Угадай, как таймеры в Go работают? Используют heap.
зачем угадывать? я прекрасно читаю Go-код, вся реализация как они работают есть на гитхабе в рантайме Go. при чем тут куча в оперативе я так и не понял, может имелось ввиду что структуры таймера в куче хранятся? ну это и так поняно, что не на стеке.

А зачем дерево? Heap!
дерево, чтобы не создавать миллион таймеров. почему? - смотри реализацию таймеров в Go, планировщиков в Go и тд. Также дерево, чтобы конкурентно вставлять и удалять из дерева данные, также оно отсортировано.

Yura
12.03.2017
09:09:57
зачем угадывать? я прекрасно читаю Go-код, вся реализация как они работают есть на гитхабе в рантайме Go. при чем тут куча в оперативе я так и не понял, может имелось ввиду что структуры таймера в куче хранятся? ну это и так поняно, что не на стеке.
Видимо, читаешь как в поговорке: "смотрю в книгу, вижу фигу". Вот тебе для расширения кругозора https://en.m.wikipedia.org/wiki/Heap_(data_structure) А вот что использовано для таймеров (смотри implementation): https://en.m.wikipedia.org/wiki/Binary_heap

Хинт: у меня маленький коммитик в гошные таймеры. Не то, чем стоит гордиться, просто к тому, что я в теме.

N
12.03.2017
09:13:48
Видимо, читаешь как в поговорке: "смотрю в книгу, вижу фигу". Вот тебе для расширения кругозора https://en.m.wikipedia.org/wiki/Heap_(data_structure) А вот что использовано для таймеров (смотри implementation): https://en.m.wikipedia.org/wiki/Binary_heap
:)))) как прикольно у тебя все смешалось в одно и люди и кони) разберись со своими теоретическими знаниями для начала, а то все путается невероятно. куча в памяти пофиг как организована с точки зрения этой задачи. реализация таймера, когда он выстреливает, что за структуры использует есть в рантайме Go - можно взять и посмотреть. как эти структуры кладутся в памяти побарабану в принципе, хранение памяти в таком виде нужно для GC и только, чтобы иметь граф связанных обьектов и по ним бегать помечая их цветами, как делает Go GC.

Yura
12.03.2017
09:16:38
Я тебе дал ссылки. Если ты путаешь heap - структуру данных и heap - организацию памяти, это много говорит о твоем знании "теории". Почитай по ссылкам. BTW экскурс в историю: динамическая память стала называться heap, т.к. в перых реализациях широко использовалась структура данных heap. В общем, иди читай википедию.

Забавно, что ты поигнорировал мое сообщение о моем коммите в реализацию гошных таймеров. Т.е. с высоты твоего невежества, ты даже не хочешь читать, что тебе пишет оппонент.

N
12.03.2017
09:20:08
Угадай, как таймеры в Go работают? Используют heap.
ну давай ссылочки тогда не на википею, коммитер, а на сурсы Go - где там используется heap как структура данных и каким макаром это поможет задаче

Yura
12.03.2017
09:22:55
https://github.com/golang/go/blob/master/src/runtime/time.go // Add a timer to the heap // Delete timer t from the heap. // Heap maintenance algorithms.

N
12.03.2017
09:24:03
молодец, нашел

Yura
12.03.2017
09:24:52
А теперь покажи, где там сортированное дерево. А потом пойди и почитай таки ссылки на википедию: для чего придумана структура данных HEAP? Почему binary heap так часто для таймеров используют? Расширяй кругозор.

Yura
12.03.2017
09:27:30
Я с телефона, гитхаб номера строк в телефоне не выводит. Что в строке 91?

N
12.03.2017
09:29:45
Yura
12.03.2017
09:33:41
Чтобы не создавать миллион таймеров? Для этого и куча сойдёт, а она в реализации проще дерева. А написать конкурентное сбалансированное дерево - еще то упражнение. Если ты такие пишешь, снимаю перед тобою шляпу. А лок на слайс - это правда. Потому я уже раза два писал свои таймеры поверх встроенных. Только проблема решается просто: заводишь много слайсов с локом на каждый, и вставляешь в разные. Собственно valyala так и предлагает починить таймеры в 1.9, и 99% вероятностью его патч будет принят.

Google
Yura
12.03.2017
09:37:46
Т.е. сейчас, зная, что его патч будет принят, я сто раз подумаю, прежде чем свои таймеры писать. А учитывая, что в оригинале Станислав предлагал по горутине на элемент, очевидно у него десятки миллионов элементов не предвидятся.

Да, ты не ответил: ты писал сбалансированное дерево, поддерживающее конкурентную вставку/удаление? Я бы хотел поучиться. Да и статья на хабре, думаю, много бы набрала плюсов.

Прости, вероятно для своей задачи ты писал.

Yura
12.03.2017
09:48:12
Твоя реализация - коммерческая тайна? Очень хочется посмотреть. (Я искренне, без издевки).

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

К чести признать, чаще всего шардирование решает задачу.

N
12.03.2017
09:52:19
я могу дать пейпер где я немного идей спер

я как раз нашел в закладках

http://www.cs.technion.ac.il/~erez/Papers/lfbtree-full.pdf

Yura
12.03.2017
09:53:37
Ок, спасибо :-)

Amigo
12.03.2017
09:57:09
в сео понимает кто-нибудь?

и в htaccess

Constantine
12.03.2017
10:04:51
не в тот чат ты пришел, мне кажется

Phil
12.03.2017
10:04:55
ты чатик перепутал

Amigo
12.03.2017
10:05:48
Просто нужно перекрыть траф с яндекса

думал разберётесь

а то сервер разрывается уже

Constantine
12.03.2017
10:06:26
не

Google
Constantine
12.03.2017
10:06:33
это не к нам

Amigo
12.03.2017
10:06:56
По миллиону уников в день заходит

Constantine
12.03.2017
10:07:47
беда какая

как ты с этим живешь?

Amigo
12.03.2017
10:08:15
дать контакты сеошника?

???

маркетинг

80лвл

Constantine
12.03.2017
10:08:27
чувак

ну каммон

Amigo
12.03.2017
10:08:32
шутка шутка

Constantine
12.03.2017
10:08:34
свали отсюда

Amigo
12.03.2017
10:08:37
просто проверить решил

ни каких ссылок

Constantine
12.03.2017
10:08:53
ага

ainu
12.03.2017
10:43:35
Более правильный способ отдавать заголовки last change или етокен

Страница 176 из 1630