In Ember, the application's state manager handles routing. Let's take a look at a simple example:
App.stateManager = Ember.StateManager.create({
start: Ember.State.extend({
index: Ember.State.extend({
route: "/",
require 'date' | |
require 'benchmark' | |
puts "patchlevel: #{RUBY_PATCHLEVEL}, release_date: #{RUBY_RELEASE_DATE}, ruby_version: #{RUBY_VERSION}, ruby_platform: #{RUBY_PLATFORM}" | |
puts '*'*80 | |
Benchmark.bm(10) do |bm| | |
bm.report("Date.today") do | |
500_000.times { Date.today } |
Recently, we've been working on extracting Ember conventions from applications we're working on into the framework. Our goal is to make it clearer how the parts of an Ember application work together, and how to organize and bootstrap your objects.
Routing is an important part of web applications. It allows your users to share the URL they see in their browser, and have the same things appear when their friends click on the link.
The Ember.js ecosystem has several great solutions for routing. But, since it is such an important part of most web applications, we've decided to build it right into the framework.
If you have already modeled your application state using Ember.StateManager
, there are a few changes you'll need to make to enable routing. Once you've made those changes, you'll notice the browser's address bar spring to life as you start using your app—just by moving between states, Ember.js will update the URL automatically.
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset=utf-8 /> | |
<title>Hello</title> | |
<link rel="stylesheet" href="styles.css"> | |
</head> | |
<body> | |
Hello World | |
</body> |
#!/usr/bin/env ruby | |
require 'rubygems' | |
require 'nokogiri' | |
require 'open-uri' | |
url = ARGV[0] | |
class Document < Nokogiri::XML::SAX::Document | |
SEMANTIC_CONTAINERS = %w(body article section nav aside hgroup header footer) | |
COUNT_ELEMENTS = %w(p a) |
The reflow appens as many times as there are frames per seconds. It recalculate all positions that change in order to diplay them. Basically, when you scroll you execute a function where you move things between two reflows. But there are functions that triggers reflows such as jQuery offset, scroll... So there are two things to take care about when you dynamically change objects in javascript to avoid too many reflows:
Quick, take a guess, what's the first hop latency to your home wireless router?
Below 1ms, right? Yeah, you wish!
Below are results from a quick test on my home router (Linksys E1550). Some lessons learned:
#!/bin/bash | |
wget -c http://virtualization.modern.ie/vhd/IEKitV1_Final/VirtualBox/Linux/{IE6_WinXP,IE7_Vista,IE8_Win7,IE9_Win7,IE10_Win8}.zip |