Умер рынок разработки сайтов !

yu-ooo
На сайте с 26.08.2021
Offline
17
#571
Это стена плача?
W1
На сайте с 22.01.2021
Offline
306
#572
timo-71 #:
bot yu-ooo похоже срабатывает на плагины. Повелся..

Думаю, просто забавно наблюдать за вашей сходкой. Как бы не по теме, но любопытно. Тема всё равно себя исчерпала, так что теперь можно писать хоть про Go, хоть про плагины на вордпрессе.

Мой форум - https://webinfo.guru –Там я всегда на связи
S3
На сайте с 29.03.2012
Offline
368
#573
timo-71 #:

Что то типа врк/аб?

https://github.com/codesenberg/bombardier

T7
На сайте с 19.09.2018
Offline
63
#574
Sly32 #:
bombardier

Заценил


S3
На сайте с 29.03.2012
Offline
368
#575
timo-71 #:

Заценил


слабый хостинг им и положить можно))) Но штука полезная для нагрузочного тестирования

T7
На сайте с 19.09.2018
Offline
63
#576
Sly32 #:
слабый хостинг им и положить можно
(aenv) [www@localhost php_sock]$ /home/www/go/bin/bombardier -c 800 -n 2000 -l -H "User-agent: Mozilla"  https://n.aio1/
Bombarding https://n.aio1:443/ with 2000 request(s) using 800 connection(s)
2000 / 2000 [=================================================================================================================] 100.00% 1108/s 1s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec      1171.34    1365.09    6251.16
  Latency      643.61ms   403.23ms      1.72s
  Latency Distribution
     50%   537.12ms
     75%      0.87s
     90%      1.23s
     95%      1.53s
     99%      1.69s
  HTTP codes:
    1xx - 0, 2xx - 1792, 3xx - 0, 4xx - 0, 5xx - 208 !!!!!!
    others - 0
  Throughput:    63.63MB/s

5xx типа того:

File "/var/www/aweb/aenv/lib/python3.9/site-packages/aioredis/connection.py", line 868, in read_response
    raise response from None
aioredis.exceptions.ResponseError: OOM command not allowed when used memory > 'maxmemory'.
Однозначно полезная. Люблю такими штучками играться😊
danforth
На сайте с 18.12.2015
Offline
153
#577
timo-71 #:

У меня хелловорлд проще

ListenAndServe всегда возвращает non-nil ошибку, поэтому лучше заменить на log.Print. log.Fatal - это по сути вызов os.Exit после записи в лог, поэтому если в функции есть какие-то defer функции (например, закрытие коннектов к базе, и т.д.), то они не выполнятся.

timo-71 #:

Почему?

Потому что язык по сути слишком прост, и когда доходишь до решения какой-то задачи, то большая часть кода начинает становиться слишком императивной. У меня наверное уже с 20 проектов на нем написано, суммарно строк кода наверное перевалило за 400k (хотя я не считал, может привираю), один из проектов держит 2млн/рпс. Язык без дженериков (обещают завести), без тайп-сум, с не очень удачной обработкой ошибок (но на порядок лучше чем эксепшены). Конечно, пока пишешь хело ворлды или байтики по сети гонять, то это все быстро и просто, а когда проект разрастается, то начинаешь тянуть кучу бойлерплейта из проекта в проект. 

timo-71 #:
Однозначно полезная.

Уж лучше тогда hey

Junior Web Developer
T7
На сайте с 19.09.2018
Offline
63
#578
danforth #:
Потому что язык по сути слишком прост, и когда доходишь до решения какой-то задачи, то большая часть кода начинает становиться слишком императивной. У меня наверное уже с 20 проектов на нем написано, суммарно строк кода наверное перевалило за 400k (хотя я не считал, может привираю), один из проектов держит 2млн/рпс. Язык без дженериков (обещают завести), без тайп-сум, с не очень удачной обработкой ошибок (но на порядок лучше чем эксепшены). Конечно, пока пишешь хело ворлды или байтики по сети гонять, то это все быстро и просто, а когда проект разрастается, то начинаешь тянуть кучу бойлерплейта из проекта в проект. 

Рутина, иными словами. Но, такое везде есть. Причем, существенная, наверное часть. "+/- " есть у всех языков, тут только вздохнуть: "такова селяви".

danforth
На сайте с 18.12.2015
Offline
153
#579
timo-71 #:

Рутина, иными словами. Но, такое везде есть. Причем, существенная, наверное часть. "+/- " есть у всех языков, тут только вздохнуть: "такова селяви".

Не, рутина есть везде, но в разных языках есть разные инструменты для её решения. В Go из-за отсутствия дженериков нет нормального способа для работы с коллекциями данных (filter, map). 

Например есть условные логи, и нужно получить топ 2 самых популярных айпи. 

Тут сама структура и данные. 

struct LogRecord {
    ip: String,
    user: String,
}

let log = vec![
    LogRecord::new("1.2.3.4", "John"),
    LogRecord::new("0xc00lhack3r", "Mike"), // bad ip, will be filtered out
    LogRecord::new("1.2.3.4", "John"),
    LogRecord::new("4.5.6.7", "Hacker"),
    LogRecord::new("1.2.3.4", "John"),
    LogRecord::new("8.9.10.11", "Alice"),
];

А тут сама логика.

// тут начинается магия
let hits: Vec<_> = log
    .iter() // получаем итератор
    .sorted_unstable_by_key(|&v| &v.ip) // сортируем для дедупликации
    .filter_map(|v| IpAddr::from_str(&v.ip).ok()) // выковыриваем из LogRecord только IP, и только те что парсятся
    .dedup_with_count() // дедуплицируем данные со счетчиком
    .sorted_unstable_by_key(|v| -(v.0 as i32)) // сортируем, те что чаще - выше
    .take(2) // берем два верхних
    .collect(); // собираем в массив
// на выходе массив из двух айпишников и количество хитов

for (count, ip) in hits {
    println!("{} => {}", ip, count)
}

На го такой код даже лень писать, ибо я уже проходил это, знаю примерно сколько символов на это уйдет. Но можешь попробовать, задачки ради)

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

T7
На сайте с 19.09.2018
Offline
63
#580
danforth #:

В Go из-за отсутствия дженериков нет нормального способа для работы с коллекциями данных (filter, map). 

Это, да, сильно неудобно. Сочувствую. У меня  львиная доля это манипуляции с какими то коллекциями.

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

danforth #:
Но можешь попробовать, задачки ради)

Я пока не сильно погружался в го. Да и со временем туго. Но, чуть позже, обязательно вникну. Есть планы (го/или что) внедрить, что бы расширить некоторые узкие места в своих поделках.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий