- http://httparchive.org
- https://tlk.io/smashingperf-sf16
- chrome://histograms/DNS
- [1] https://rescomp.stanford.edu/~cheshire/rants/Latency.html ↩
- [2] https://www.nateberkopec.com/2015/11/05/page-weight-doesnt-matter.html#preconnect ↩
- http://jankfree.org
- http://www.perf-tooling.today/tools
- http://perf.rocks/
- Understand the network and what’s happening behind the scenes to get a better understanding of performance
- Network
- Bandwidth: How much data being sent over a network
- Latency: how long the data has to travel - It’s the latency, Stupid 1
- latency/speed of light * 1.5(fiber network)
- High Performance Browser Networking
- Latency is what really matters - has bigger impact than bandwidth at certain point
- Network Request Order
- DNS lookup - goes thru multiples layers of cache(browser, network, nothing?)
- TCP Connection - Handshake between the client and server
- SSL Negotiation - Client/Server hello
- Request - 14k avg initial request ACK back and forth to server
- Fix Latency
- Use a CDN
- Use Keep-alive on servers to keep request session alive
- Not a default setting in apache
- Resource Hints - Good for 3rd party domains. use as a header, link preload, dynamically with js. Use for predictable next steps.
- Prefetch better for older versions of IE
- Preconnect - DNS, TCP, and SSL are all connect. Go straight to request
- Preload
- Prerender - newer IE
- Use pre-connect first then prefetch as a fallback - Page Weight Doesn’t Matter 2
- HTTP2
- Push promises
- Akamai has setting to enable
- Fallback to HTTP1
- Order of downloaded resources
- Parse html
- Build DOM
- Parse CSS
- Build CSSOM
- Combine DOM and CSSOM to make render tree
- Parsing stops when a script tag is encountered, script is downloaded, and executed
- Async - parse html and javascript in parallel, executes js, and continues parsing HTML
- Defer - parse html all the way through, download when it can, and execute at the end
- Browser has lookahead and will see scripts at bottom of page - bottom of page scripts isn’t a performance hack anymore. Put them in head and u async, or loadJS
- Render tree, layout, paint
- Critical Path
- Load JS async
- Use filament group loadCSS to load ‘async’
- Inline critical CSS - ‘above the fold’
- Addyosmani - critical(node, grunt)
- Filament group - criticalCSS(gulp, grunt)
- Online generator
- Page speed module and other services offer css critical options
- Web Page Test
- Quantity based metrics - quantity of request, weight
- Weight doesn’t matter. Serving correctly does(lazy load, font loading, etc)
- Rule based metrics - Adhering to rule based audits
- Great checklist of basic optimizations, not guaranteed to hit everything
- Milestone timings - times of a very specific milestone in the loading of a page
- Time to first byte - server response
- Start Render - when something gets painted to the screen
- DOMConententLoaded - jQuery on ready
- Document Complete - when document fires onLoad event
- Fully Loaded - end of waterfall
- Speed Index - representation of the perceived load of a page
- Quantity based metrics - quantity of request, weight
- Performance Budgets
- Use grunt perfbudget
- PSI for cli page speed insights
- Speedcurve
- Alerts via slack, email if budget is broken
- Compare performance against competitors
- Enforce budget
- What happens after load
- 100ms: in ‘instantaneous’
- RAIL - response, animation, idle, load (set budgets and goals in each category)
- Master Dev tools and Web Page Test to get better understanding of perf
- requestIdleCallback - to do non-essential work when browser is idle
- R, A, L - most important in RAIL acronym
- Network
- Do research before design
- Why redesign the site?
- Why redesign the site now?
- How will we know if the new site is better?
- Expose conflicts and problems early on
- Get perspectives and opinions from different people throughout an organization
- O.K.R = Objectives & Key Results
- Clear objective and a measurable result
- Involve stakeholders in design, make them part of the design process
- Use spreadsheets that everyone understands to kick off design process, e.g. Google Docs
- The McDonald's Theory
- It's always easier to revise than to create
- Be the first to visualize an idea - get a rough sketch
- Use OKR-based designs to kick off design ideas
- Element Collages
- Focus on OKR-based design on single elements
- Don't focus on big picture too early on
- Talk about goals not features to stakeholders and clients
- Short, simple sketches or notes are far better than wireframes early on
- Great design presentation is just about great information architecture
- Make design objective - agree on the definition
- Design is the rendering of intent
- Design is about the look, art direction is about the feel
- Art direction is about touchy, feely words
- FutureLearn pattern library
- A system is an interconnected set of elements coherently ...
- A system is more than a collection of elements
- Purpose of a design system
- Produce coherent patterns that facilitate and encourage certain types of behavior
- Don't just list patterns show how they connect
- Produce coherent patterns that facilitate and encourage certain types of behavior
- Connections
- Semantic Connections
- Name things based on their global function - the function of the module.
- Recognizing re-usable modules early on will prevent repetition
- Name things collaboratively and refer to them by their names
- Do it in person or in Slack - come up with global function and name
- Refer to the elements by the name with we agreed on
- Use pattern bot to remind of pattern names
- Structural Connections
- Molecule - a collection of html 'base' elements
- Organism - a collection of components
- Pattern naming components exercise, see what groupings people come up with
- Organisms(stand-alones) - well defined and independent parts or sections of a page
- What matters is not the structure itself but that it's shared and understood by the people who use it
- Defaults, atoms, molecules, organisms, ... (see graphic)
- Visual Connections
- Subatomic particles - separating properties from atoms, use design tokens to build bg colors, text, font
- Core patterns, animations, bg-colors, fonts, etc. - all the base default properties
- Typography and spacing are closely related, use typographic scale
- Build Spacious modules, use relative units to space out module typography(spacious, regular, compact)
- Tom Osbourne loudness for properties
- Treat core brand patterns separately, don't mix them with modules
- Define elements and the relationship between them
- A Pattern Language - book
- Design Patterns - book
- Thing of modules not as isolated entities but as families with a share purpose
- Test if modules are achieving desired goals
- Semantic Connections
- Lessons Learned
- If there aren't share components make it more integrated
- Start with layers of the bigger picture
- Don't start on the home page, start at typographic scale, headings, smaller items
- At every stage aim to capture the system as a whole
- Evolving a design system is a gradual piecemeal process, not the result of a master design plan
- DRY/Single Source of Truth - single, unambiguous, authoritative representation within a system
- DRY is about maintenance
- DRY is about not typing and remembering
- DRY is changing 1 thing in 1 place
- Repetition is better than the wrong abstraction
- The Single Responsibility Principle - do done thing only and one thing well
- Break things down into their smaller parts
- Subway is a good example of SRP - 6.4 billion possible sandwich combinations
- Offer colleagues ingredients to build own modules
- The Separation of Concerns - Each things responsible for itself and nothing more
- Reason about and study features in isolation
- Only bind CSS into CSS-based classes
- Don't write DOM-like selectors
- Don't bind CSS onto data-* attributes
- Don't bind JS onto CSS classes
- No aria roles, DOM markup, inline styling, or binding JS onto styling hooks
- Address semantic concerns first, then accessibility, then stylistic, then behavioral
- Grid systems are a great example of separation of concerns
- Immutability - An object that can't be changed ...
- Makes things predictable
- Helps debugging
- .col-6 grid is an example of mutable code. it'll change to 100% on smaller viewports - not good
- Don't have several states of the same thing
- Use modifier or responsive suffixes - @
- Use !important to force immutability
- Cyclomatic Complexity - number of if's and else's in a program
- Furthest to the right in a selector is the subject
- Start of as explicit as you can
- Nesting selectors or qualified selectors increases Cyclomatic Complexity
- The Open/Closed Principle - open for extension, but closed for modification
- Never change anything at its source
- Avoid the Domino Effect
- New features are changed using modifiers
- Orthogonality - using features in a language and get expected/similar results
- Reduces interdependence
- Improves composability
- Separates ...
- Good test is to reorganize Sass imports and everything should be the same
- Good test is nesting components and achieving desirable results
- Go hybrid - use the web, app, and OS
- Provide better experience natively on desktop since web has a hard time keeping up
- Electron - Atom editor hybrid app
- Check out Code Mirror
- SVG filters and feColorMatrix are crazy
- CSS Filters are easier
- CSS filters are more performant but aren't as well supported
- CSS Blend Modes
- Photshop like blend modes
- Image Effects
- Image washout effect
- blend-mode:lighten, background color
- Infared effect
- Bokeh effect
- Anaglyphs
- Instagram Filters in straight CSS
- ArtTheWeb.com
- #arttheweb
- Image washout effect
- Every modern browser supports HTTP2
- HTTP/2 - what, why, and how
- Improve end-user perceived latency
- Address the 'head of line blocking
- Not require multiple connections
- One TCP connection
- Request = Streams
- HTTP2 split into 1 or more frames - headers, data, rst ...
- Control over flow control and prioritization
- Control over pausing streams
- HTTP/2 : A new Excerpt from Hight Performance Browser Networking
- Steve Souders book about performance
- Pulling and pushing to a server is one of the most energy consuming things after having the screen on
- Best Practices
- Reduce DNS lookups
- Reuse TCP connections
- H/2 enables fewer connections, which equals less load on infrastructure. More users on hardware
- Use a CDN
- Minimize number of HTTP redirects
- istlsfastyet.com for TLS + HTTP/2 status and best practices
- Eliminate unnecessary request bytes
- Compress assets during transfer
- What's different about HTTP2
- Request are handled by batch. Browsers can only handle up to 6 request at a time
- Use up to 2 domain shards for HTTP1 to enable higher parallelism
- HTTP2 eliminate sharding. Use everything from one domain
- HTTP1 & HTTP2 best practices can co-exist
- HTTP2 enables smaller loading blocks instead of concatenating everything
- HTTP2 will still have a best practice sweet spot on shipped files, i.e. don't ship hundreds of modules
- HTTP2 enables 'server push' server promises to deliver resources.
- Trigger push using link preload header
- No more inlining code
- Safari and Edge currently have server push disabled
- Server initiates push
- Is it worth it?
- Google saw 30-50% performance increases
- _High Performance Browser Networking
- Slides
- 10 Things Every Designer Needs to Know About Brain and Behavioral Science
- Peripheral vision gives the gist of the scene
- Peripheral vision 'decides' where you look next
- People have mental models
- There are generational differences in tech expectations
- You may not be your target audience
- Some things change and some things stay the same
- Neuroplasticity - see with your tongue
- Transience is becoming more valued
- Cell phones are stand-ins for our entire social network. Less valuable interactions
- We will have relationships with robots
- Podcast: Human Tech
- Look deep into nature and then you will understand everything better - Albert Einstein
- Badges to push users to go on side quest
- IT's not about problem solving, it's about empathy
- The Dishonest Truth of Dishonesty
- Collaboration
- No excuse to not use the picture element
- Serve the correct file sizes
- We have no empathy for our end users
- The web is for everyone, so build it for everyone
- Demand remote work
- Tammy Everts - Writing a lot about performance Time Is Money: The Business Value of Web Performance
- 2014 to 2015 - 40% mobile shopping to 75%, respectively
- Conversion rate on mobile has been slightly higher - only when website is fast
- Ads cost a lot in terms of data. Be responsible when serving ads
- Sir Tim Berners-Lee 2016 quote - in 2014 all of us must protect ...
- All our design and code decisions need to be mindful.
- A Book Apart - Design For Real Life
- Set performance goals in the design spec
- Perceived performance is the most important
- How to optimize
- Optimize images
- Use vectors when possible
- Compress
- Responsive images - picture
- Layer Snap for SEO friendly SVG animations straight from Illustrator
- Leaving Pixels Behind - Vector article for designers
- Look at settings from slide for Photoshop saving settings
- Optimize asset loading
- Take it easy on the Javascript
- Inline critical css
- Load stylesheets async
- Load all JS async (even ads and tracking)
- Load fonts async, apply them in a progressive manner
- Audit JS, is it all needed?
- Cut the Mustard
- Enhance.js - if browser passes test then request enhanced experience
- Optimize images
- Designers need to build design life cycles
- Design in an enterprise organization can be tricky
- Keep style guide current and useful
- Great design systems are usable by your entire team
- Nathan Curtis - writes a lot about design systems
- Design Principles
- clarity - enable people to see
- efficiency - streamline workflows
- consistency - ...
- beauty - ...
- take component notes on things like spacing, font sizes, etc
- Design Tokens - allows design to be framework agnostic
- Don't use JS in style guide. Show examples of state classes
- Design System Ops
- salesforce theo, salesforce sass-deprecate
- Design systems slack channel
- Netlify
- JAM philosophy
- Decouple Building & Hosting
- Decouple Front-end & Back-end
- API's rather than Databases
- Pre-baked Markup, enhanced with JS
- JAM stack
- Build tools
- Git
- Frameworks
- APIs
- CDN
- JAM best practices
- Use a CDN
- Atomic Deploys -
- Instant Cache Invalidation
- Everything lives in Git
- Automated Builds
- jamstack.org
- CSS Transitions, & CSS Animations are only good supported methods - SMIL deprecated in Chrome
- All web animations are time-based
- Time may be shifted backwards, forwards, paused, and played
- Tween - in-between state between to keyframes
- Keyframe Effect - in charge of animation playing, being paused, moving, etc
- rachelnabors.com
- Meetings and email are a waste of time, utilize things like slack
- Good meetings to have
- Product reviews
- Postmordum meetings
- Good meetings to have
- ...
Post conference Instagram walk/hike followed by some 🍻