Як насправді працює конвертація в браузері (і чому я так її зробив)
Dov Azencot
@DovAzencotПричина, з якої взагалі існує цей сайт, — маленька дурнувата мить неспокою, що трапилася зі мною роками раніше. Мені треба було сконвертувати одне HEIC-фото в JPG, я вбив у пошук очевидне й потрапив на конвертер, який хотів, щоб я завантажив свій знімок на їхній сервер. Я так і зробив. Спрацювало. А тоді сидів і думав: це фото тепер лежить на якійсь машині, про яку я нічого не знаю, керованій людьми, яких я ніколи не зустріну, і зберігається невідомо скільки. Для випадкового скриншота — гаразд. Але це був не скриншот. Це було особисте фото, і я щойно віддав його чужим людям, щоб заощадити собі тридцять секунд.
Ось проблема, яку я вирішив більше не мати. Виявилося, що те завантаження від початку було непотрібним.
Старий спосіб: орендувати чужий комп'ютер
Традиційний онлайн-конвертер працює як служба доставки поштою. Ви відправляєте файл нагору на сервер. Сервер виконує конвертацію софтом, встановленим на його машині. Він відправляє результат назад униз. Ваше зображення зробило подорож туди-назад крізь залізо, яке ви не контролюєте, і десь посередині воно лежало, повністю, на диску, що вам не належить.
Кожна обіцянка приватності, прикручена до цієї моделі, — це обіцянка про поведінку: файл видаляється за годину, ніхто не дивиться. Може, так і є. Може, і справді. У вас немає способу перевірити, а довіряєте ви цьому справжні байти свого файлу. Довіра і є вся архітектура, а довіра — рівно те, що я не хотів витрачати.
Новий спосіб: у вашому браузері вже є комп'ютер
Ось що змінилося. Сучасні браузери вміють виконувати справжні скомпільовані програми на швидкості, близькій до рідної, через штуку під назвою WebAssembly — коротко WASM. Кодеки зображень, які раніше жили на сервері, — код, що читає PNG, кодує WebP, декодує HEIC, — можна скомпілювати у WASM і виконувати усередині вкладки браузера, що у вас уже відкрита.
Тож коли ви кидаєте файл на сторінку, збудовану в такий спосіб, конвертувальний софт завантажується на вашу машину один раз, як і будь-яка інша частина вебсторінки. Далі вся справжня робота — читання вашого зображення, перекодування, запис нового файлу — відбувається на вашому власному процесорі, у вашій власній пам'яті. Результат віддається прямо вам як завантаження. Ваш файл нікуди не відправляється, бо його нема куди відправляти. Сервера в ланцюжку немає взагалі.
Ось чому я можу сказати, що ваші файли ніколи не покидають пристрій, і мати на увазі це як факт, а не як політику. Річ не в тому, що я обіцяю не дивитися. Річ у тім, що немає шляху, яким ваше зображення дісталося б мене. Я не зміг би дістати ваше фото, навіть якби суд наказав, бо його ніколи не було на моєму боці дроту. Приватність — не функція, яку я додав зверху. Це наслідок того, де виконується код.
Як ви можете переконатися, що це правда
Вам не треба вірити мені на слово, і це та частина, яку я люблю найбільше. Відкрийте інструменти розробника у браузері, стежте за вкладкою мережі й сконвертуйте файл. Ви побачите, як сторінка й WASM-кодек завантажуються один раз. Ви не побачите, щоб ваше зображення пішло нагору. Ще краще: завантажте сторінку, вимкніть Wi-Fi і все одно сконвертуйте щось. Воно все одно працює, бо все потрібне вже на вашій машині. Інструмент, що завантажує ваші файли, так не вміє. Цей уміє.
Одне справжнє обмеження
Я обіцяв чесність, тож ось воно. Виконання конвертації на вашому власному пристрої означає, що вона використовує вашу власну пам'ять, а вкладка браузера не отримує нескінченної пам'яті для гри.
Для звичайних файлів — фото, скриншотів, логотипів, того, що люди конвертують цілими днями, — це не проблема. Але якщо ви кинете в неї щось справді величезне, одне зображення екстремальної роздільності або велетенський пакет одразу, ви можете впертися в стелю. Декодувати зображення означає тримати його нестиснені пікселі в пам'яті, а це набагато більше за файл на диску, і гігантське зображення може вичерпати те, що вкладці дозволено. Коли таке стається, конвертація сповзає до повзання або вкладка здається.
Сервер із 64 ГБ оперативної пам'яті такої проблеми не має ніколи. Ось і обмін, сказаний прямо: серверний конвертер може перемолоти файли більші, ніж ваш пристрій колись подужав би. Цей підхід не може. Натомість він дає вам те, що ваш файл ніколи не покидає ваших рук. Для переважної більшості того, що люди насправді конвертують, це обмін, вартий того без другої думки. Для рідкісного файлу-монстра це справжнє обмеження, і я радше скажу вам, ніж вдаватиму, що його немає.
Чому я все одно вважаю це правильним варіантом за замовчуванням
Більшість конвертацій — це звичайні файли, яким від початку не треба було торкатися сервера. Завантаження завжди було пережитком епохи, коли браузери не вміли робити цю роботу самі. Тепер уміють. Тож здоровий вибір за замовчуванням перевернувся: тримайте файл на своїй машині, робіть роботу локально й тягніться по сервер лише в той рідкісний випадок, коли ваше залізо справді не справляється.
Ось і вся ідея за всім, що тут є. Це той самий сайт, який я збудував для себе після того одного неспокійного пообіддя, щоб більше ніколи не віддавати особисте фото чужій людині лише заради зміни розширення файлу. Виявилося, що мені ніколи й не треба було. Вам теж.
Схожі статті
Чому я конвертую PNG у WebP (і коли — нізащо)
PNG чудовий, коли в ньому працюєш, і марнотратний, коли його викладаєш. Розберемо, що WebP реально заощаджує, де він марний, і одне правило, яке я не порушую.
PNG чи JPG? Правило на десять років, яким я вирішую
Без втрат проти втрат, краї проти фото, прозорість чи ні. Одне просте питання каже, яким має бути файл, — із реальною таблицею розмірів на доказ.
Чому айфон знімає у форматі HEIC, і коли робити JPG
HEIC — справді кращий формат, який половина вебу досі не відкриває. Ось чому Apple його обрав, що ви втрачаєте під час конвертації в JPG і коли я не морочуся.
Усі статті