Reloading or switching away mid-conversion

Reload, navigate away or close the tab and the conversion is gone — no resume, no warning. Switch to another tab and it finishes anyway.

Reload costs a full rerun Another tab: still finishes No "are you sure?" prompt

Short answer: if you reload the page, navigate to another URL, or close the tab while a conversion is running, the conversion is thrown away completely. There is no resume and no partial credit: you come back to an empty converter, and the file has to be converted again from the beginning, at full cost. Switching to another tab is the exception — the conversion keeps going and finished normally in every test I ran.

What I measured today, on this site in Chrome 153: I interrupted a 12-megapixel conversion (11,084,868 bytes in, 3,177,680 bytes out) part-way through and then redid it: interrupting after 2,831 ms and starting over cost 5,803, 6,524 and 8,930 ms, against 4,132–7,461 ms for an uninterrupted run of the same file. The work already done is simply discarded. Nothing is left behind: no error message, no console entry, no partially written file — and the finished JPG, when it does come out, is byte-identical to the one an uninterrupted run produces.

There is also no warning of any kind. The page has no beforeunload handler, and navigating away mid-conversion produced 0 dialogs.

Why nothing can be resumed

A conversion here is not a job on a server that survives a reload. It is a promise inside one JavaScript document: the file is handed to a decoder running in your own browser (nothing is uploaded — see the network-layer proof), and the finished JPG is held in memory as a blob URL. When the document is replaced, that promise, the blob and the file name all die with it.

I checked every place a page could have stashed something to come back to:

Where state could hideWhat I found
localStorage0 keys, before and after a conversion
sessionStorage0 keys, before and after a conversion
IndexedDB0 databases
Cache API0 cache keys
window.onbeforeunloadnull — no leave-prompt is even possible

So the answer to "can it pick up where it left off" is not "not yet" — there is nothing to pick up from.

Reloading part-way through

I started a 12-megapixel conversion and hit reload at three different points, then converted the same file again. Each run was on a freshly loaded page:

Reloaded afterWhat the page was doingWhat I came back toReady againRerun costOutput
1,509 msconverting — spinner visibleempty converter306 ms8,431 ms3,177,680 bytes
5,032 msconverting — spinner visibleempty converter282 ms7,087 ms3,177,680 bytes
8,554 msalready finished — result on screen, download address liveempty converter232 ms5,337 ms3,177,680 bytes

Two things are worth reading off that table. First, you do not come back to a stuck spinner or a complaint. In the first two runs the spinner block was visible when I hit reload; in all three I came back to the page's clean starting state — spinner hidden, result hidden, error hidden, file input empty, quality menu back at 0.85. The interruption leaves no trace at all.

The third row is worth a second look, because it was not an interruption at all: by 8,554 ms that run had already finished, the result block was showing and the blob address was live. So that reload destroyed a completed JPG rather than a conversion in flight — and the redo still cost 5,337 ms. There is no discount for progress made, and no discount for having finished either.

The reload itself is not held up by the conversion. From issuing the reload to the converter being ready again took 100–306 ms across every interrupted reload today, against 116–119 ms for reloading the same page while idle. The browser does not wait for the in-flight conversion to finish before letting go of the page — it simply drops it.

The expensive part is the rerun, and the timing says the interrupted work is fully wasted. Against a warm baseline of 4,132–7,461 ms for this file (six runs on one page: 7,890, 7,461, 5,733, 5,327, 4,132 and 5,650 ms), the three reruns after interrupting at 2,831 ms took 8,930, 5,803 and 6,524 ms.

Does an interruption damage anything?

No. I interrupted the same conversion three times in a row (each time after 1,698 ms, reloading between them) and then let one run finish. It completed in 7,120 ms, produced 3,177,680 bytes, and that output was byte-identical to the baseline — same SHA-256 as a run that was never interrupted. The error box was empty, the spinner was hidden, and the result block was displayed normally. During the interrupted runs the browser logged 0 error or console entries: from the page's point of view, nothing went wrong, because the page was simply gone.

Navigating away, and closing the tab

Same outcome, two more routes:

The one thing that is not lost by leaving is something you already have. If the conversion had finished and you had already pressed download, leaving immediately does not take the file with it: I clicked download and navigated away in the same breath, and the file still landed on disk complete — 38,078 bytes, exactly the same as the control download I let finish normally.

What if the conversion had already finished?

Refreshing after a successful conversion, before you download, loses the JPG too — the finished file only ever existed in memory. I converted a 700×476 photo (38,078 bytes out), read the download link's blob address back and fetched it successfully, then reloaded. Afterwards:

For that small photo the redo is cheap — 201 and 346 ms in today's warm runs — so it is a nuisance rather than a disaster. It scales with the file: the same mistake on the 12-megapixel file costs thousands of milliseconds, and on a batch of 200 files it costs the whole queue.

Switching to another tab: the one interruption that survives

This is the good news, and it is the case most people actually mean by "switching away". I opened a second tab and brought it to the front, confirmed the converter's tab reported visibilityState of hidden, started a conversion there, and left it in the background. All three background runs finished, and all three produced 3,177,680 bytes with the same SHA-256 as the foreground runs:

RunTab visibilityConversion timeOutput
1hidden7,314 ms3,177,680 bytes
2visible (foreground control)5,542 ms3,177,680 bytes
3hidden9,490 ms3,177,680 bytes
4visible (foreground control)5,183 ms3,177,680 bytes
5hidden6,825 ms3,177,680 bytes
6visible (foreground control)5,535 ms3,177,680 bytes

Background runs were slower in every pair — 6,825–9,490 ms against 5,183–5,542 ms in front — so leaving a tab is not free, but nothing is lost and nothing has to be redone. The decoding happens off the main thread, which is presumably why it runs on at all; I did not measure which thread does what today.

I also tested the harsher version: browsers freeze tabs you have not looked at for a while. I put a counter on the page ticking every 100 ms, started a conversion, and froze the tab for 10 seconds. The counter stuck at 8 for all 20 samples I took during the freeze and moved again afterwards, so the page really was suspended. The conversion then took 17,953 ms end to end against 5,721 ms for an unfrozen control — it did not progress while frozen, but it resumed and finished with identical output when the tab was active again. A frozen tab costs you wall-clock time, not the conversion.

One thing I could not measure: minimising the window or switching to a different application. I can drive tabs, not the window manager, so I have no number for that and I am not going to invent one.

What this means in practice

Questions

Does the page warn me before I lose a conversion?

No. It has no beforeunload handler at all, and navigating away mid-conversion produced 0 dialogs. There is no prompt to dismiss and no confirmation to click through — which also means there is nothing to stop you.

Does the conversion keep running if I switch to another tab?

Yes. All three background runs completed and produced byte-identical output to the foreground runs. They were slower — 6,825–9,490 ms against 5,183–5,542 ms — so expect to wait longer, but expect a result.

Does it keep running if I close the tab?

No. The work lives inside that document. A new tab starts empty, and the conversion has to run again from the start.

Is anything saved so it can resume later?

No. I found 0 localStorage keys, 0 sessionStorage keys, 0 IndexedDB databases and 0 cache keys, both before and after a conversion.

If I reload, do I have to download the decoder again?

No. On a return visit the decoder's 678,928 bytes came from cache with a transfer size of 0; the page was ready again in 141 ms. I tried to catch the very first load mid-download by reloading 500 ms after navigating, but the decoder was already present by then, so I have no measurement of a reload during the decoder's own download.

Does an interrupted conversion leave a broken half-file behind?

Nothing I could find: no error message, no console entry, no partial download. Every completed conversion I measured, interrupted or not, produced the same 3,177,680 bytes for that file.

Try it: open the converter, drop a photo in, and switch to another tab while it works — then try reloading instead.

First published: 5 October 2026