background preloader

Why mobile web apps are slow

Why mobile web apps are slow
I’ve had an unusual number of interesting conversations spin out of my previous article documenting that mobile web apps are slow. This has sparked some discussion, both online and IRL. But sadly, the discussion has not been as… fact-based as I would like. So what I’m going to do in this post is try to bring some actual evidence to bear on the problem, instead of just doing the shouting match thing. You’ll see benchmarks, you’ll hear from experts, you’ll even read honest-to-God journal papers on point. There are–and this is not a joke–over 100 citations in this blog post. Now I am going to warn you–this is a very freaking long article, weighing in at very nearly 10k words. I write in part because this topic has been discussed–endlessly–in soundbyte form. A quick review My previous blog post documented, based on SunSpider benchmarks, that the state of the world, today, is that mobile web apps are slow. You should really go read that article, but I will show you the benchmark anyway: Why? Related:  ios

How to stop worrying about CSS vendor prefixes — Alejandro Beltrán There are a lot of ways to start using vendor-prefixed CSS features. The Good You could: Write them by hand using referring to something like CSS3 Please! or the Can I use site.Use Prefixr, which will do it for you.Use Prefix free, which will also do it for you but client-side.Use Sass mixins or Compass. The important thing is that we have alternatives. If you use any of the above methods I think it's safe to say that you may have already stopped worrying about vendor prefixes. The Bad? Sometimes, however, that may not be enough. Here are a couple of thoughts of my own about dealing with prefixes: Writing them by hand is, IMHO, tedious and error-prone. The Awesome Enter Autoprefixer, a tool that parses CSS and adds prefixed values when necessary according to the Can I Use site. Why it's awesome You can specify browser support via a configuration which can be done in different ways: Demo Let's actually create an example of what I'm talking about. Supposing we have a style.css as: Closing thoughts

ios - What kind of leaks does automatic reference counting in Objective-C not prevent or minimize Responsive Web Design Patterns | This Is Responsive Responsive Patterns A collection of patterns and modules for responsive designs. Submit a pattern Layout Reflowing Layouts Equal Width Off Canvas Source-Order Shift Lists Grid Block Navigation Single-Level Multi-level Breadcrumbs Pagination Images Responsive Image Techniques Media/Data Video Fluid Video Iframes Tables Charts & Graphs Responsive Chart Forms Basic Forms Text Lettering Fittext Footnotes Responsive Footnotes Modules Carousel Tabs Accordion Messaging Lightbox

Programming with Objective-C: Encapsulating Data In addition to the messaging behavior covered in the previous chapter, an object also encapsulates data through its properties. This chapter describes the Objective-C syntax used to declare properties for an object and explains how those properties are implemented by default through synthesis of accessor methods and instance variables. If a property is backed by an instance variable, that variable must be set correctly in any initialization methods. If an object needs to maintain a link to another object through a property, it’s important to consider the nature of the relationship between the two objects. Although memory management for Objective-C objects is mostly handled for you through Automatic Reference Counting (ARC), it’s important to know how to avoid problems like strong reference cycles, which lead to memory leaks. This chapter explains the lifecycle of an object, and describes how to think in terms of managing your graph of objects through relationships. For example:

HTML5 History API: A Syntax Primer As most of us probably are aware, a significant part of the HTML5 spec is the expansion of the History API. This post will not be a super extensive discussion of this subject, especially since it’s something that I’m only now just getting into understanding better. But I thought I would put down the main components of the API, for my own quick reference, and I hope it will prove useful to my readers and those searching via Google. Also, if you want a good introduction to the History API, including what its benefits are, see the links near the end of this post. history.length The length property on the history object tells you how many entries are in the session history. We can prepare a silly demonstration of the length property using the following awful code: <a href="#" onclick="this.innerHTML = '# of items in your history: ' + history.length; return false">Click to View history.length</a> And here’s a live version of it: Click to View history.length history.go() So if you have the following:

Comparison of the Available iOS Charting Libraries In this post, I explore four of the available iOS charting libraries and investigate the features, API, and pros and cons of each. In order to conduct a fair investigation, I have developed a comparison framework which loads historic stock market data from the Yahoo Finance API. My findings were that Core Plot had a strong set of documentation, yet was a little light on features and built in functionality. Shinobi Charts had super fast performance, was extremely easy to integrate and had a clean, friendly API. The Framework The framework can be easily extended to display the data fetched in different view controllers that can be set up to use various charting libraries. Framework Library / API Usage Rather than generating random data or using the same hard-coded data every time the comparison was run, stock market data is fetched from the Yahoo Finance API in CSV format . Framework Structure The framework is based around a Data Transfer Object (DTO) named StockPriceDataContainer. KeepEdge

In defense of the humble id attribute Recently on my post about quoting HTML5 attributes, Paul Irish commented in passing IDs are totally out of fashion now due to their high specificity so who cares This idea has been floating around for a while. Dave Gregory wrote Don’t use ID selectors in CSS almost exactly 3 years ago, observing the following. The element is not re-​​usable on that page.This is the beginning of a downward sprial into specificity.Usually, IDs refer to something very specific, and abstracting would be tough.Any performance gains picked up by using id, is negated by adding any other selector to the left fo that id. The cat really got set among the pigeons when CSS Lint, a tool to help developers spot errors and adhere to good practice included a warning when your CSS uses id selectors. One of CSS’s benefits is the ability to reuse style rules in multiple places. Now, I’m far from the first person to have concerns with this recommendation. In short: don’t blindly follow the crap these tools tell you.

Beginner’s Guide to iOS Development: The Interface – Part I Apple has been a leading industry in the mobile world for years with its iPhone and iPad series. Despite the hype it can create with every official release like iOS 5, it’s also holding a large portion of market shares in the mobile platform, and this is probably the reason that most clients will want their app to exist in the Apple’s app store, thus becoming the reason for developers to learn and build the iPhone app. (Image Source: Apple Developer) The good news is, iPhone application development is not as hard as you might think, and this post exists as a comprehensive guide to walk you through the complete process of building an application for iPhone. So whether you’re learning for business or you just have an amazing app idea that might make you a millionaire, let’s get started on building your first iPhone app! Why Develop for Apple? I see this question asked frequently so I want to explain why you should be interested in iPhone development. Planning your iPhone App Structure Reeder

5 Reasons to Choose Opera over Chrome - Chrome vs Opera Opera Software recently took a major decision to stop using its own rendering engine, and move to Google’s Blink engine on desktop and Android platforms. The Norwegian browser vendor has already released stable builds with Blink in action. One can download and use Blink-powered Opera browser on Windows, Mac and Android phones. If you think that by doing so Opera has become a poor clone of Chrome – you are wrong. If you are surprising why one should choose Opera over Chrome, here are five reasons: No Google You must have read hundreds of articles like this one, where the author decides to move away from Google due to privacy and other issues, and switches over to Mozilla Firefox. Not A Dumb Company Opera has a great team of industry experts and developers. Off-Road Mode Earlier available as “Turbo Mode”, the Off-Road mode of Opera browsers enables server-side data compression to reduce bandwidth and data charges. Extensions Browsing Data Sync

iOS 7: Hidden Gems and Workarounds - iOS 7 - issue #5 When iOS 7 was first announced, Apple developers all over the world tried to compile their apps, and spent the next few months fixing whatever was broken, or even rebuilding the app from scratch. As a result, there wasn’t much time to take a closer look at what’s new in iOS 7. Apart from the obvious great small tweaks like NSArray’s firstObject, which has been retroactively made public all the way back to iOS 4, there are a lot more hidden gems waiting to be discovered. Smooth Fade Animations I’m not talking about the new spring animation APIs or UIDynamics, but something more subtle. An interesting detail is that _UIBackdropView (which is used as the background view inside UIToolbar or UIPopoverView) can’t animate its blur if allowsGroupOpacity is enabled, so you might want to temporarily disable this when you do an alpha transform. The edge antialiasing property can be useful if you want to replicate the animation that Safari does when showing all tabs. Blocking Animations to: Pagination

25 eye-popping examples of parallax scrolling websites | Web design With new technologies like HTML5 and CSS3, it's becoming possible to create more advanced, interesting and remarkable effects in the browser. While these effects can be gimmicky, when employed in the right way they can result in a remarkable and memorable website. One big web design trend of the moment is parallax scrolling, which involves the background moving at a slower rate to the foreground, creating a 3D effect as you scroll down the page. It can sometimes be overwhelming, but when used sparingly it can provide a nice, subtle element of depth. To show how it should be done, we’ve collected together sites that employ the technique to good effect. Also read: Build a parallax scrolling website: pro tips 01. Last year, flat design took over the world of digital design. "One of the principal problems was to insert the HTML5 game in the middle of a parallax scroll," explains inTacto's creative director Alejandro Lazos. 02. "It was meant as an insult, but we took it as a compliment. 03.

Technical Q&A QA1747: Debugging Deployed iOS Apps Technical Q&A QA1747 Q: How can I debug a deployed app without Xcode's debugger? A: Once you have deployed your app, either through the App Store or as an Ad Hoc or Enterprise build, you won't be able to attach Xcode's debugger to it. To debug problems you'll need analyze Crash Logs and Console output from the device. For more information on writing rich NSLog statements, see Improved logging in Objective-C. Getting Crash Logs and Console Output Getting Crash Logs and Console Output With Xcode Even though you won't be able to run the app in Xcode's debugger, Xcode can still give you all the information you need to debug the problem. 1) Plug in the device and open Xcode 2) Open the Organizer window and select the Devices tab 3) Under the DEVICES section in the left column, expand the listing for the device 4) Select Device Logs to see crash logs or select Console to see Console output Getting Console Output Without Xcode 1) Plug in the device and open iPhone Configuration Utility

An Introduction to Node's New Streams by Calvin French-Owen Recently, there’s been a lot of commotion on twitter and in #node.js about the new streams2 API. The official stream docs leave a lot to be desired, which has lead to general confusion. That’s too bad, because using new streams can really simplify your code once you understand how they work. Let me take you there… If you’ve never used node streams before, I highly recommend you read Max Ogden’s introduction. For the lazy: a stream pipes data from a “source” to a “sink” without reading the entire dataset into memory all at once. Why do we need a new version of streams? In previous versions of node, the only help you were given was a basic Stream prototype. There used to be all sorts of implicit rules which proper streams should follow in order to write data. Worse still, streams would start emitting data willy-nilly (generally on nextTick). Stream authors had to keep track of way too much state and define way too many methods. In node 0.10.x, you get a lot more right up front. 1. 2. 3. 4.