История изменений
Исправление lbvf50txt, (текущая версия) :
общаемся с удалённой системой к которой пинг 50мсек, и что нам лишняя 1мсек от питона.
urls = []
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0040.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0050.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0060.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0070.shtml")
Это общие рассуждения. Вот конкретная задача скачать «Войну и Мир» Толстого и перевести ее в текстовый формат с длинной строки в 70 символов. Сделать однопоточно на Ruby.
Команда запускается так ./upload_and_stdout.rb > all.txt
Что имеем по скорости?
Ruby:
# Download 2121.023 ms
# Convert to UTF-8 103.808 ms
# Remove \r 60.152 ms
# Strip HTML 331.474 ms
# Remove `-` 102.34 ms
# Make 70 symbols 920.447 ms
# To STDOUT 6.182 ms
Переведенный LLM код на Go:
Download 1222.453 ms
Convert to UTF-8 0.000 ms
Remove \r 4.915 ms
Strip HTML 195.624 ms
Remove `-` 588.275 ms
Make 70 symbols 532.536 ms
To STDOUT 32.242 ms
Длинней STDOUT потому что LLM версия не правильно режет строки.
Строки короче в 2 раза. Но суть та-же.
На обработку 90k строк общим весом 6Mb. При этом я «не в чем себе не отказывал», и склеивал колол строки так:
def line_to_70(line)
l = line.split(" ")
arr = []
max = 70
i = 0
while i < l.size
if arr.empty?
arr.push ""
end
if (arr[-1].size + l[i].size) < max
arr[-1] += l[i] + " "
else
arr.push ""
arr[-1] += l[i] + " "
end
i += 1
end
arr.reject{|x| x.empty?}
end
run
texts.map!{|text|
text
.split("\n")
.map{|l| l.empty? ? "" : line_to_70(l).join("\n")}
.join("\n\n").gsub(/\n{4,}/,"\n\n")
}
stop("Make 70 symbols")
И на это у меня ушла 1 секунда. Т.е. по это еще «терпимо» по классификации оценки работы. А все остальные операции уходят в «вполне себе хорошо». Код на Go только в 2 раза быстрей.
Есть таблица от Jakob Nielsen, где наглядно показывается как пользователь реагирует на задержки.
Время задержки | Восприятие пользователем | Реакция/ощущение |
---|---|---|
0–100 мс | ⚡ Мгновенно (blazingly fast) | Чувствуется как локальная реакция |
100–300 мс | 🤔 Машина «думает» (machine thinking) | Замечается микрозадержка |
300–1000 мс (1 сек) | ⏱ Заметная пауза | Терпимо, но внимание сбивается |
1–3 сек | 💤 Медленно (slow) | Пользователь отвлекается |
3–10 сек | 😡 Очень медленно (very slow) | Раздражение, риск закрыть сайт |
>10 сек | 🚪 Уход (abandon) | Пользователь уходит, если нет прогресса |
Исправление lbvf50txt, :
общаемся с удалённой системой к которой пинг 50мсек, и что нам лишняя 1мсек от питона.
urls = []
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0040.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0050.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0060.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0070.shtml")
Это общие рассуждения. Вот конкретная задача скачать «Войну и Мир» Толстого и перевести ее в текстовый формат с длинной строки в 70 символов. Сделать на Ruby.
Команда запускается так ./upload_and_stdout.rb > all.txt
Что имеем по скорости?
Ruby:
# Download 2121.023 ms
# Convert to UTF-8 103.808 ms
# Remove \r 60.152 ms
# Strip HTML 331.474 ms
# Remove `-` 102.34 ms
# Make 70 symbols 920.447 ms
# To STDOUT 6.182 ms
Переведенный LLM код на Go:
Download 1222.453 ms
Convert to UTF-8 0.000 ms
Remove \r 4.915 ms
Strip HTML 195.624 ms
Remove `-` 588.275 ms
Make 70 symbols 532.536 ms
To STDOUT 32.242 ms
Длинней STDOUT потому что LLM версия не правильно режет строки.
Строки короче в 2 раза. Но суть та-же.
На обработку 90k строк общим весом 6Mb. При этом я «не в чем себе не отказывал», и склеивал колол строки так:
def line_to_70(line)
l = line.split(" ")
arr = []
max = 70
i = 0
while i < l.size
if arr.empty?
arr.push ""
end
if (arr[-1].size + l[i].size) < max
arr[-1] += l[i] + " "
else
arr.push ""
arr[-1] += l[i] + " "
end
i += 1
end
arr.reject{|x| x.empty?}
end
run
texts.map!{|text|
text
.split("\n")
.map{|l| l.empty? ? "" : line_to_70(l).join("\n")}
.join("\n\n").gsub(/\n{4,}/,"\n\n")
}
stop("Make 70 symbols")
И на это у меня ушла 1 секунда. Т.е. по это еще «терпимо» по классификации оценки работы. А все остальные операции уходят в «вполне себе хорошо». Код на Go только в 2 раза быстрей.
Есть таблица от Jakob Nielsen, где наглядно показывается как пользователь реагирует на задержки.
Время задержки | Восприятие пользователем | Реакция/ощущение |
---|---|---|
0–100 мс | ⚡ Мгновенно (blazingly fast) | Чувствуется как локальная реакция |
100–300 мс | 🤔 Машина «думает» (machine thinking) | Замечается микрозадержка |
300–1000 мс (1 сек) | ⏱ Заметная пауза | Терпимо, но внимание сбивается |
1–3 сек | 💤 Медленно (slow) | Пользователь отвлекается |
3–10 сек | 😡 Очень медленно (very slow) | Раздражение, риск закрыть сайт |
>10 сек | 🚪 Уход (abandon) | Пользователь уходит, если нет прогресса |
Исправление lbvf50txt, :
общаемся с удалённой системой к которой пинг 50мсек, и что нам лишняя 1мсек от питона.
urls = []
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0040.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0050.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0060.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0070.shtml")
Это общие рассуждения. Вот конкретная задача скачать «Войну и Мир» Толстого и перевести ее в текстовый формат с длинной строки в 70 символов. Сделать на Ruby.
Команда запускается так ./upload_and_stdout.rb > all.txt
Что имеем по скорости?
Ruby:
# Download 2121.023 ms
# Convert to UTF-8 103.808 ms
# Remove \r 60.152 ms
# Strip HTML 331.474 ms
# Remove `-` 102.34 ms
# Make 70 symbols 920.447 ms
# To STDOUT 6.182 ms
Переведенный LLM код на Go:
Download 1222.453 ms
Convert to UTF-8 0.000 ms
Remove \r 4.915 ms
Strip HTML 195.624 ms
Remove `-` 588.275 ms
Make 70 symbols 532.536 ms
To STDOUT 32.242 ms
Длинней STDOUT потому что LLM версия не правильно режет строки.
Но суть та-же.
На обработку 90k строк общим весом 6Mb. При этом я «не в чем себе не отказывал», и склеивал колол строки так:
def line_to_70(line)
l = line.split(" ")
arr = []
max = 70
i = 0
while i < l.size
if arr.empty?
arr.push ""
end
if (arr[-1].size + l[i].size) < max
arr[-1] += l[i] + " "
else
arr.push ""
arr[-1] += l[i] + " "
end
i += 1
end
arr.reject{|x| x.empty?}
end
run
texts.map!{|text|
text
.split("\n")
.map{|l| l.empty? ? "" : line_to_70(l).join("\n")}
.join("\n\n").gsub(/\n{4,}/,"\n\n")
}
stop("Make 70 symbols")
И на это у меня ушла 1 секунда. Т.е. по это еще «терпимо» по классификации оценки работы. А все остальные операции уходят в «вполне себе хорошо». Код на Go только в 2 раза быстрей.
Есть таблица от Jakob Nielsen, где наглядно показывается как пользователь реагирует на задержки.
Время задержки | Восприятие пользователем | Реакция/ощущение |
---|---|---|
0–100 мс | ⚡ Мгновенно (blazingly fast) | Чувствуется как локальная реакция |
100–300 мс | 🤔 Машина «думает» (machine thinking) | Замечается микрозадержка |
300–1000 мс (1 сек) | ⏱ Заметная пауза | Терпимо, но внимание сбивается |
1–3 сек | 💤 Медленно (slow) | Пользователь отвлекается |
3–10 сек | 😡 Очень медленно (very slow) | Раздражение, риск закрыть сайт |
>10 сек | 🚪 Уход (abandon) | Пользователь уходит, если нет прогресса |
Исходная версия lbvf50txt, :
общаемся с удалённой системой к которой пинг 50мсек, и что нам лишняя 1мсек от питона.
urls = []
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0040.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0050.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0060.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0070.shtml")
Это общие рассуждения. Вот конкретная задача скачать «Войну и Мир» Толстого и перевести ее в текстовый формат с длинной строки в 70 символов. Сделать на Ruby.
Команда запускается так ./upload_and_stdout.rb > all.txt
Что имеем по скорости?
# Download 2121.023 ms
# Convert to UTF-8 103.808 ms
# Remove \r 60.152 ms
# Strip HTML 331.474 ms
# Remove `-` 102.34 ms
# Make 70 symbols 920.447 ms
# To STDOUT 6.182 ms
На обработку 90k строк общим весом 6Mb. При этом я «не в чем себе не отказывал», и склеивал колол строки так:
def line_to_70(line)
l = line.split(" ")
arr = []
max = 70
i = 0
while i < l.size
if arr.empty?
arr.push ""
end
if (arr[-1].size + l[i].size) < max
arr[-1] += l[i] + " "
else
arr.push ""
arr[-1] += l[i] + " "
end
i += 1
end
arr.reject{|x| x.empty?}
end
run
texts.map!{|text|
text
.split("\n")
.map{|l| l.empty? ? "" : line_to_70(l).join("\n")}
.join("\n\n").gsub(/\n{4,}/,"\n\n")
}
stop("Make 70 symbols")
И на это у меня ушла 1 секунда. Т.е. по это еще «терпимо» по классификации оценки работы. А все остальные операции уходят в «вполне себе хорошо».
Есть таблица от Jakob Nielsen, где наглядно показывается как пользователь реагирует на задержки.
Время задержки | Восприятие пользователем | Реакция/ощущение |
---|---|---|
0–100 мс | ⚡ Мгновенно (blazingly fast) | Чувствуется как локальная реакция |
100–300 мс | 🤔 Машина «думает» (machine thinking) | Замечается микрозадержка |
300–1000 мс (1 сек) | ⏱ Заметная пауза | Терпимо, но внимание сбивается |
1–3 сек | 💤 Медленно (slow) | Пользователь отвлекается |
3–10 сек | 😡 Очень медленно (very slow) | Раздражение, риск закрыть сайт |
>10 сек | 🚪 Уход (abandon) | Пользователь уходит, если нет прогресса |