Apple's iOS is "deceptively fast"
reddit.com
reddit.com
What actually happens: When you background the app, Apple takes a screenshot to do the fade-out animation with. This caused a bit of hubhub a few years ago because if you jailbreak you can find the screenshot of the last closed app .
It's actually the developers job to give a launch image for the app itself, and the apple guidelines are that you should aim to emulate your app's homepage with no data in it. You don't have to, we don't at http://art.sy - Which isn't Apple taking a screengrab.
A simple way to think about this is, what happens if you open the app in a different orientation a screenshot wouldnt work then.
(Hash Bangs were still the wrong way to do it of course, even back then).
What happens when you switch orientations? The screenshot/app will show as rotated and rotate to whatever angle the device is currently at.
Which reminds me of the incredibly bloated software by Adobe and Autodesk. When compared to Blender.org which opens and runs dozens of times faster on hundreds times less memory. For a full featured product. I can't count how many times I've heard that blender feels worse than maya only because it's faster and free.
I have often wondered whether this feeling of software being insubstantial slows down the propagation of FOSS in general? People seem to feel they are getting less of a tool when they can download something for free and don't have to wait for it to perform tasks as they would with larger, more bloated works.
This may be a little off topic, but I wonder how much of this phenomenon is born out of consumerism? We are used to having to wait or forfeit other luxuries in order to gain access to high quality things, so when we are presented with an excellent, free solution our perception of it is automatically jaded by our beliefs? Is this international?
For example, encryption - I, and apparently the people in the above example, have little or no understanding about how it works at a fundamental level. So if I was having something encrypted I would expect, due to ignorance and having it's difficulty on a pedestal, that it would take a reasonable amount of time to complete - certainly not instantaneous.
But I think you're right with the perception of powerful = slow to start.
Whereas when you get something for free you obviously have no financial investment. You can just throw it away without any care or feeling of loss. You're likely to perceive it as having no tangible value at first. The more time and resources you invest into that the more you will start perceiving the value.
I once worked in a company where one of the teams was working on a large database indexing routine for a client.
The whole thing took a couple of seconds to run, even with a live data set, which was perceived by the account manager as "too fast" - basically not worth the amount the customer was paying as it was seen as doing too little, so a 30 second delay was implemented in the routine. Did nothing, just waited 30 seconds. Account manager happy, software delivered, client happy.
A couple of years later one of the team, now a contractor was asked to help the client optimise the system as with the increased data volumes the indexing routine was now taking closer to a minute to run.
I don't even want to think what he charged them for the 30 second performance improvement he managed...
As long as the client is happy, I suppose...
I don't know about Autodesk. This "bloated Adobe software" meme doesn't hold though. Try opening a 200MB to 1GB image file in Photoshop and any competing editor. See which one will crumble. See which one will perform actions on the image faster.
PS may have UI bloat (custom flash panels, for one) and feature bloat, but it's a very performant and stable application for what it does. It does not have "memory" bloat. Most of the size of the app is assets (icons, vectors, fonts, templates, etc).
As for the actual code, if you don't use a feature the code isn't even loaded in memory --the OS does that automatically for any app.
I'd like to put similar feature in my HTML/JS application. [[EDIT: a web-application for desktop computers; no relation to iOS]]
Currently in my app, any click that pops a new dialog waits for server to HTTP reply and only then draws anything on the screen. What I'd like to have, is to show the dialog right away, with empty fields at first, and inject contents once it arrives from the server. The idea being, the user can grasp the GUI and start moving mouse cursor to the right widget a bit earlier; i.e., less wait after the click.
Btw., Nokia N900, with Maemo Linux, behaves exactly like iOS in that regard -- shows app screenshot very quickly, and loads the app in background. It shows clearly on XTerm app, for example.
http://developer.apple.com/library/ios/#documentation/userex...
The problem was that it took too long to modify the files when the user clicked "download" after completing their purchase - they had to wait as the ID3 modifier chugged away doing its thing. So instead of waiting for the user to fill out their CC data and complete the sale, I started updating the ID3 tags as soon as the user put the MP3s into his/her shopping cart and cached the result. It didn't really matter much if the cart got abandoned, but the files were all ready for the customer once they got done checking out if they made the purchase.
Thanks for reminding me.
With a diesel car, it's better to not let them "warm up" after starting... diesels don't warm up very quickly if they are not under load and they will accumulate carbon and parts will wear more if you let them "warm up" at idle after starting.
"Preglowing is not linked to operation of the driver's door as in some earlier VW diesel systems."
In my experience, it's got to be pretty cold (well below freezing) for the warm-up time to be over 1 second.
Windows 8 is full of animations, to disguise latency.
Another similar example is how Apple doesn't show a pop-up message when an app crashes in iOS, while Android does (Force Close), which makes people think Android crashes a lot more when they keep seeing these Force Closes, even though there have been some reports saying that iOS apps crash more often than Android apps on average. But the perception matters a lot more.
Imagine a car that didn't let you drive until the aircon had reached the desired temperature...
'course this ultimately will mean one day we'll all just be brains in a big vat fed drugs directly by Apple, but trust me, that'll feel awesome.
On its own, the title is ambiguous.
http://public.wsu.edu/~brians/errors/deceptively.html
I'm also not sure why "deceptively fast" is in quotes because it's not contained in the linked post.
The Chrome UI (Chrome) will load instantly and then it will sit there idly and do nothing and be irresponsive for a few seconds before it wakes up and starts loading the page.
Actually Chrome is pretty slow, but it is deceptively attempting to give the impression that it is fast.
It's gotten on my nerves to the point that I have replaced it with Firefox beta as my new default browser.
I general I oppose tricks like this. They are annoying and counter-intuitive. Most users will probably wonder why the UI which is present on screen is irresponsive, etc. Having a loading-screen or showing that you are not ready is much better than lying.
> When the system launches an app, it temporarily displays a static launch image on the screen. Your app provides this image, with the image contents usually containing a prerendered version of your app’s default user interface.
- App Launch (Default) Images: http://bit.ly/LMLbu0
It's been this way for close to 5 years now.
The solution I found was an exponential fill. Say you estimate an operation will take 4 seconds (this can even be hard coded). You show a bar that starts empty, and after 2 seconds, it is halfway full, after 4 seconds, 3/4 full, 6 seconds, 7/8, and so on until the operation completes and the bar disappears. That way, you never end up paused on a full progress bar, and you are still conveying a reasonable estimate to your user, and you never have to write another line of code to update a progress bar.
We changed that with bogus writing under the progress bar. The first bar had "searching" under it, and usually that was enough.
If it was still searching after the bar was at 100%, the bar would start the animation again and we would change the text with random stuff like ("building indexes","fetching images","generating tables",etc...).
One idea I've toyed with, which adds some complexity, would be some random variation, so that you'd still get some faster jumps at the end, even though the average would be exponential.
For example on web browser you don't need to constantly re-render the page when user is dragging or pinching. Just move around and zoom the static image. Once user let's go, then you redraw the page.
It's easy to over-engineer a solution to this problem (let's freeze-dry the application when the user left, or, the user has a pattern of launching this app after that one, let's warm it up for them just in case, or, the user always launches this app when turning on their phone at 8 in the morning, etc. etc.)
Coming from windows, I always felt like when I dragged a window around that the buttons were likely to fall off! On OSX it's so smooth that I suspected they did things like take a screenshot while the window is in motion and use blurs, etc, so that all of the objects are not moving independently. I'm not sure that's actually true but what is obvious is that Apple has always been very obsessive about using visual tricks to make the UI seem very responsive and smooth.
I like that hacker news is relatively free of that. Or at least I try to stay clear of every "Google is evil / no Apple is evil / have faith in Microsoft, they are still the evilest" threads.
It is not deceptive, it is smart. Android applications appear to have a delay in launching because there is a moment of inaction after tapping an icon. Apple made it so that immediate action is taken after an icon is tapped, and that does make it more responsive.
A loading dialog that flashes on the screen for a second would be annoying, and the phone wouldn't be as good that way.
For example, for years people would judge the quality of a car by the "thunk" sound on closing the drivers side door.
Now car manufacturers have teams of people who engineer that specific sound (same with exhaust noise).
See also weights inside speaker cabinets.
(The progress bar shown when copying a big file OTOH is accurate.)
The 10.5.3 Update also has a release note about the progress bar:
"Improves the accuracy of the Software Update progress bar indicator."
It took me a while to realise why my updates were going much faster than they used to.
I find actually find that iOS quite laggy after using WinPhone for a bit. It's obvious a fair amount of crap is hidden behind pretty graphics in iOS.
Conversely, if WinPhone is doing something, it makes you aware of it up front by making you wait. To put that point in perspective before everyone blows and says "WinPhone is shitty", it's done that only TWICE since I got the phone 3 months ago and both times were after the only two reboots the phone has ever had. Apart from that, EVERYTHING is instant.
I want it now and get it now with no illusion!
" Sorry, you are completely wrong to object, since it actually is faster. You said it yourself: you notice the trick when an app is exceptionally slow, you can't interact when you're ready to. That means in every other case you get to 'begin using' immediately. Interaction isn't only pressing something. It's also processing and deciding what to do. If Adobe Photoshop spit out a fake blank screenshot instead of the splash screen, you could start to think of what tools to use and what to do with them. This is part of using the app.
I mean, by your argument the screen might as well be blank except when you're moving the mouse, clicking, or typing. Since seeing the interface when you're not using it actively isn't part of using the app.
But that's obviously wrong, and obviously a non-blank screen is part of 'using it.'
Recap.
Current photoshop
1) For x seconds: Loads... I get to read some credits instead of being able to look at the app's interface.
2) For another y seconds: I stare at the interface deciding what to do.
3) For another z seconds: I am taking my first action
4) after a small processing time (p) the action I first took is completed.
In the splash screen scenario, the time until my first action is completed is defined by x + y + z + p . But by putting up a fake image you can reduce the time to y + z + p, eliminating the extra time from x entirely! (or at least eliminating as much of it as is covered by y. Y is almost never exactly zero.)
It's that simple. Faking the first screenshot is ALWAYS faster, unless you're not a human but a computer script that takes an action 0 milliseconds after the interface is put up.
Every app should put up a screenshot while it loads!
Or even a bit more than a screenshot!
Clicking the "Firefox" icon should instantly (notepad.exe speed) bring up a fake window. Then you can slowly mosy your mouse over to the URL tab or the Google search tab, and slowly start typing where you want to go first. By the time you hit enter, hopefully firefox has really loaded.
It's just two little input tabs. Why not fake them for awhile?
The App screenshot trick is similar. I approve completely*.
I don't know what's so bad about that. We (programmers) have been doing this stuff since beginning of time. Caching is nothing different than what he describes and calls it deceptive.
As long as there's an impression of speed and the user doesn't actually feel like he's waiting too long everything is fine.
For our current project we render views into images and animate transitions between those images and not the views itself. Only to make it look more smooth and speedy. And I still can sleep at night :)