LINUX.ORG.RU

Почему YouTube JS HTML5 player такой здоровенный?

 ,


0

1

Увидел в коде страницы какого-то сайта ссылку на https://s.ytimg.com/yts/jsbin/html5player-new-ru_RU-vfl0_S_yx/html5player-new.js Оно размером ~ в мегабайт. Мегабайт! минифицированного! JS кода, 2-3 мегабайта до минификации. Я не JS-программист, поэтому просто интересно - зачем там столько кода? Беглый просмотр после деминификации никаких pure-js видео декодеров не выявил, да и было бы странно. Но тогда что оно делает, хотя бы примерно? Я понимаю про базовую функциональность - выбор качества видео, прокрутка, субтитры и тд., однако не думаю, что для этого нужно столько кода.

2-3 мегабайта

Зато ЧИТАЕМО.

anonymous
()

Потому что у гуглекодеров руки растут из анальной жопы индуса.

Оно размером ~ в мегабайт. Мегабайт! минифицированного! JS кода, 2-3 мегабайта до минификации.

Минификация таких эффектов не даёт. В лучшем случае это 30% уменьшения объёма, но на практике, в которой применяется gzip, разницы вообще нет. Минификация применяется как форма обфускации, никакой пользы ни для какой производительности в ней нет.

Goury ★★★★★
()

Это Google. Корпорация добра. Добра должно быть много.

Вон, за последние года три размер гуглософта под Android вырос раз в 10...

KRoN73 ★★★★★
()

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

dib2 ★★★★★
()

обфускация, недодрм, нечего таскать чужое добро в закрома оф родина. вот такая корпорация добра, да

anonymous
()

Я не JS-программист

В Google тоже не JS-программисты, исходником наверняка был код на Java, который потом перегнали через GWT.

PolarFox ★★★★★
()

Ну так бегло просмотрел. Они туда похоже всю графику плеера запихали, диалоги, менюшки, окошки.

Radjah ★★★★★
()

Развелось языков программирования, которые в JS конпеляют.

Hate
()
Ответ на: комментарий от Goury

Может и не даёт, а может и даёт Обфускация и минификация - это, думаю, хоть и схожие, но не равнозначные действия. Минификация нужна, чтобы уменьшить объём скачиваемых данных, что в масштабе Гугла, думаю, экономит миллионы долларов. Чаще всего минификация приводит к некторой форме обфускации. Но смысл обфускации как таковой - не уменьшение кода, а затруднение его понимания. И после этого код может и вырасти в объёме. Вот, например, нормальный код:

#include <stdio.h>

int main(void)
{
  puts("Hello World!");
  return 0;
}
Вот минифицированный:
#include<stdio.h>;int main(void){puts("Hello World!");return 0;}
А это обфусцированный (нашёл в интернетах):
#define _i int 
#define _v void 
#define _c char 
#define _f float 
#define _d double 
#define _p * 
#define o(_C_) putchar((char)_C_); 
#define pf(_S_,_E_) printf(_S_,_E_); 
#define ps(_S_) puts(_S_); 
#define s(_S_) _S_; 
#define m(_S_) int main() { _S_ return 0; } 
#define f(_T_,_N_,_P_,_S_) _T_ _N_ _P_ {_S_} 
#define c(_E_,_1_,_2_) if(_E_){_1_}else{_2_} 
#define w(_E_,_S_) while(_E_){_S_} 
#define v(_T_,_N_) _T_ _N_; 
#define a(_N_,_E_) _N_=_E_; 
#define b(_0_,_1_,_2_) ((_1_)_0_(_2_)) 
#define u(_0_,_1_) (_0_(_1_))
f(_i,S_,(_i _X_,_i _Y_),s(return b(+,_X_,_Y_)))f(_v,H_,(),o(0x48)o(0x65)o(0x6C)o(0x6C)o(0x6F)o(0x20)o(0x57)o(0x6F)o(0x72)o(0x6C)o(0x64)o(0x21))m(s(H_())o(S_(0x5,0x5)))
Разница, думаю, понятна.

Про производительность и так понятно.

nimdamsk
() автор топика
Ответ на: комментарий от nimdamsk

Я в курсе чем минификация отличается от обфускации.
А ты слышал про кэширование и сжатие?
Так вот: нихера минификация не даёт никакого эффекта, если руки не из жопы у админов растут.

Goury ★★★★★
()
Ответ на: комментарий от Goury

Похоже, что вы забываете о том, что в коде ещё есть комментарии, тот же JSDoc будет весьма объёмным, текст лицензии. Они все вырезаются при минификации. Также, процесс минификации часто сопровождается процессом склейки нескольких скриптов, что эффект даёт.

Y ★★
()

Что бы замедлить все браузеры кроме их Хрома.

И это не только плеера касается: у меня при нажатии колесом на ютубе и открытии в новой вкладке открывает быстрее, чем при при обычном нажатии, при котором появляется полоска в самом верху страницы

anonymous
()
Ответ на: комментарий от Y

Ну так и нехер целиком тексты лицензий пихать в скрипты и нехер скрипты кучей отдельных файлов отдавать.
Это не процесс минификации даёт эффект, а рукожопие мешает нормально сайт отгружать без него.

Goury ★★★★★
()
Ответ на: комментарий от KRoN73

Это Google. Корпорация добра. Добра должно быть много.

они уже не корпорация добра. после образования «alphabet» они убрали из правил «be good» и заменили на «do the right things».

hope13 ★★★
()
Ответ на: комментарий от Goury

Про кэширование слышал, про CDN слышал, и ещё про мого чего. Но зачем-то все всё равно выкладывают js-lib-min.js, хотя кэши и CDN. Зачем-то гугл каждый год новый алгоритм сжатия выкатывает, хотя вроде никогда таких не было, но вот опять... Для webfonts2, например. Почему-то гуглу не подходит убогий Deflate/GZip, не знаю почему. Может потому, что после 80-х в области сжатия что-то новое придумали? Хотя я думаю, если честно, что всё это глупости. Пора бы давно на экспорт JS выкатывать пожатый байткод, как это было у Java .class, но чтобы сжатие было не GZip, а нормальное, со стандартным хорошим словарём. А криптовать байткод или нет - пусть каждый сам решает. Но эти многомегабайтные простыни JS меня удивляют. И ещё от них у меня старенький iPad падает постоянно.

nimdamsk
() автор топика
Ответ на: комментарий от PolarFox

Через GW всё перегнано, вот и размеры отсюда, такч-то нормуль думаю.

anonymous
()

Ресурсы скорее всего сложили.

Vit ★★★★★
()
Ответ на: комментарий от Vit

если минификация добавляет больше 10% эффективности гзипу — значит исходный материал писался жопоруким индусом.

Goury ★★★★★
()

"... Бабушка! А почему у тебя такие большие уши?! ..."

anonymous
()

Оно размером ~ в мегабайт.

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

ya-betmen ★★★★★
()
Ответ на: комментарий от Goury

Стандартные библиотеки типа жикваери и т.п. Либо у тебя минификатор кривой или в нем половина опций отключена.

Vit ★★★★★
()
Ответ на: комментарий от Goury

Пора вводить новый термин - «зап@#делся как анонимус».

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

Vit ★★★★★
()
Ответ на: комментарий от ya-betmen

Так я и хотел узнать откуда там «логики» на 2-3 мегабайта. Пока не понял. Всё, что вы перечислили (кроме «разовые ссылки на видео» - не распарсил), думаю, не может (должно) столько в коде весить. Декодер x264 на C в FFmpeg весит ~1 MB. VP9 в нём же ~0.5 MB. Почти полноценный x264-декодер в JS https://github.com/mbebenita/Broadway весит ~0.27 MB в минифицированном виде. То есть в треть! кода HTML5-плеера от гугла влезет полноценный! декодер x264. Ну что можно ещё туда засунуть? Я таки склоняюсь к мнению, что это результат абстракций над абстракциями на модных фреймворках с модными реактивными технологиями. Код, наверно, стало писать легче, а мой старый добрый (до сих пор) 1й айпадик на таких чудесах падает.

nimdamsk
() автор топика
Ответ на: комментарий от nimdamsk

Так я и хотел узнать откуда там «логики» на 2-3 мегабайта

Так запили плеер с аналогичным функционалом - поймёшь.

думаю, не может (должно) столько в коде весить

Почему это не может? Сравнение с кодеками некорректно, кодеки не генерят разметку со всякими стилями классами и тегами (которые, кстати, не минифицируются). Плюс кросбраузерность, например у тех же жкверей разница между 1.9 и 2 практически 10% только за счёт выпиливания совместимости с ослом.

ya-betmen ★★★★★
()
Ответ на: комментарий от anonymous

Ты хоть себе представляешь сколько это 2 мегабайта кода?

А тебя не смущает что это код плеера на жаваскрипте? Сравни с другими плеерами, ща глянул влц - сами исходники 3 метра.

ya-betmen ★★★★★
()
Ответ на: комментарий от ya-betmen

ща глянул влц

А ты папочку src-то открывал? Чё видно? И ещё учти, что там тонна ифдефов. И это vlc, мать твою, с огромной кучей функционала, а не сраный ютубовский плеер.

anonymous
()
Ответ на: комментарий от anonymous

И это vlc, мать твою, с огромной кучей функционала, а не сраный ютубовский плеер.

Правильно, поэтому полный тарбол бесит 20 метров (зажатый), а распакованный так вообще больше сотни.

ya-betmen ★★★★★
()
Ответ на: комментарий от ya-betmen

Молодец, ещё можешь сюда же приплюсовать порно со своего харда, которое смотришь через vlc.

бесит

Буква 'б' достаточно далеко от буквы 'в', чтобы это было неосторожной опечаткой, иф ю ноу уот ай мин.

anonymous
()
Ответ на: комментарий от Goury

нехер целиком тексты лицензий пихать в скрипты и нехер скрипты

Конечно. Но, даже, если не пихать их целиком, то комментарии — плюс выжимка лицензий занимают порядочно места.

нехер скрипты кучей отдельных файлов отдавать

И я о том же, поэтому их нужно чем-то склеить :-)

Y ★★
()
Ответ на: комментарий от anonymous

Мой код без jq прекрасен и гзипается без минификации отлично

Goury ★★★★★
()
Ответ на: комментарий от Y

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

Файлы клеить можно и без минификации.

Goury ★★★★★
()
Ответ на: комментарий от Goury

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

Расскажи, что использование JSDoc для каждого метода с целью описать типы аргументов, возвращаемых значений — жопоручество.

А если ещё использовать его для документирования API.

Y ★★
()
Ответ на: комментарий от Y

Дык браузеры комменты не читают. Поправил, пропустил через минимизатор с чисткой комментов, залил в продакшн, а код с отступами и комментами в репу.

И логика описана в комментах, и ненужные данные по сети не гоняются.

Radjah ★★★★★
()
Ответ на: комментарий от Goury

А тебя не смущает что у VLC в комплекте все кодеки в мире, а в ётубе никаких кодеков вообще?

Я же кажется написал, что полный распакованный тарбол больше сотни метров, кажется 150 или 170, со всеми модулями, кодеками, ресурсами и прочее. В ютюбе получается только плеер и часть ресурсов.

ya-betmen ★★★★★
()
Ответ на: комментарий от Radjah

Так об этом и речь держу. Прочитайте всю ветвь дискуссии между мной и Goury.

Y ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.