Performance is fundamentally, a UX concern. Sites that are slow to render or janky to interact with are a bad user experience. We strive to write performant code for our users, but users don’t directly interact with our code - it all happens through the medium of the browser. The browser is the middleman between us and our users; therefore to make our users happy, we first have to make the browser happy. But how exactly do we do that?
In this talk, we’ll learn how browsers work under the hood: how they request, construct, and render a website. At each step along the way, we’ll cover what we can do as developers to make the browser’s job easier, and why those best practices work. You’ll leave with a solid understanding of how to write code that works with the browser, not against it, and ultimately improves your users’ experience.
Historically, sharing a Linux server entailed all kinds of untenable compromises. In addition to the security concerns, there was simply no good way to keep one application from hogging resources and messing with the others. The classic “noisy neighbor” problem made shared systems the bargain-basement slums of the Internet, suitable only for small or throwaway projects.
Serious use-cases traditionally demanded dedicated systems. Over the past decade virtualization (in conjunction with Moore’s law) has democratized the availability of what amount to dedicated systems, and the result is hundreds of thousands of websites and applications deployed into VPS or cloud instances. It’s a step in the right direction, but still has glaring flaws.
Most of these websites are just piles of code sitting on a server somewhere. How did that code got there? How can it can be scaled? Secured? Maintained? It’s anybody’s guess. There simply isn’t enough SysAdmin talent in the world to meet the demands of managing all these apps with anything close to best practices without a better model.
Containers are a whole new ballgame. Unlike VMs, you skip the overhead of running an entire OS for every application environment. There’s also no need to provision a whole new machine to have a place to deploy, meaning you can spin up or scale your application with orders of magnitude more speed and accuracy.
Powerpoint file(incl. animations!): http://db.tt/oQiXb9lq
This is the slides of the presentation "Wordpress optimization" who presented at WordCamp 2013.
How to improve your wordpress performance and speed up your website more than 700% faster!
WordPress + NGINX Best Practices with EasyEngineNGINX, Inc.
Whether for speed, security or scalability, a WordPress site can be improved using NGINX.
View full webinar on-demand at: http://nginx.com/resources/webinars/taste-nginx-conf-wordpress-nginx-best-practices-easyengine/
Content caching is one of the most effective ways to dramatically improve the performance of a web site. In this webinar, we’ll deep-dive into NGINX’s caching abilities and investigate the architecture used, debugging techniques and advanced configuration. By the end of the webinar, you’ll be well equipped to configure NGINX to cache content exactly as you need.
View full webinar on demand at http://nginx.com/resources/webinars/content-caching-nginx/
Scaling MongoDB in the cloud with Microsoft AzureIvan Fioravanti
Scaling MongoDB in the cloud with Microsoft Azure.
From my MongoDB Evening Talk of 1st April in Milan.
What we do, why, and how with MongoDB, with a lot of tips & tricks from our real life experience.
Historically, sharing a Linux server entailed all kinds of untenable compromises. In addition to the security concerns, there was simply no good way to keep one application from hogging resources and messing with the others. The classic “noisy neighbor” problem made shared systems the bargain-basement slums of the Internet, suitable only for small or throwaway projects.
Serious use-cases traditionally demanded dedicated systems. Over the past decade virtualization (in conjunction with Moore’s law) has democratized the availability of what amount to dedicated systems, and the result is hundreds of thousands of websites and applications deployed into VPS or cloud instances. It’s a step in the right direction, but still has glaring flaws.
Most of these websites are just piles of code sitting on a server somewhere. How did that code got there? How can it can be scaled? Secured? Maintained? It’s anybody’s guess. There simply isn’t enough SysAdmin talent in the world to meet the demands of managing all these apps with anything close to best practices without a better model.
Containers are a whole new ballgame. Unlike VMs, you skip the overhead of running an entire OS for every application environment. There’s also no need to provision a whole new machine to have a place to deploy, meaning you can spin up or scale your application with orders of magnitude more speed and accuracy.
Powerpoint file(incl. animations!): http://db.tt/oQiXb9lq
This is the slides of the presentation "Wordpress optimization" who presented at WordCamp 2013.
How to improve your wordpress performance and speed up your website more than 700% faster!
WordPress + NGINX Best Practices with EasyEngineNGINX, Inc.
Whether for speed, security or scalability, a WordPress site can be improved using NGINX.
View full webinar on-demand at: http://nginx.com/resources/webinars/taste-nginx-conf-wordpress-nginx-best-practices-easyengine/
Content caching is one of the most effective ways to dramatically improve the performance of a web site. In this webinar, we’ll deep-dive into NGINX’s caching abilities and investigate the architecture used, debugging techniques and advanced configuration. By the end of the webinar, you’ll be well equipped to configure NGINX to cache content exactly as you need.
View full webinar on demand at http://nginx.com/resources/webinars/content-caching-nginx/
Scaling MongoDB in the cloud with Microsoft AzureIvan Fioravanti
Scaling MongoDB in the cloud with Microsoft Azure.
From my MongoDB Evening Talk of 1st April in Milan.
What we do, why, and how with MongoDB, with a lot of tips & tricks from our real life experience.
Reverse proxy & web cache with NGINX, HAProxy and VarnishEl Mahdi Benzekri
Discover the very wide world of web servers, in addition to the basic web deliverance fonctionnality, we will cover the reverse proxy, the resource caching and the load balancing.
Nginx and apache HTTPD will be used as web server and reverse proxy, and to illustrate some caching features we will also present varnish a powerful caching server.
To introduce load balancers we will compare between Nginx and Haproxy.
This presentation explains how to deploy and use the Integrated Caching feature on Netscaler. I gave this presentation to Citrix staff, customers and partners in worldwide in 2011. The presentation covers best practices and gotchas :) Integrated Caching is an excellent feature that can greatly improve the performance of your website.
As we build richer, more complex web applications it’s easy to forget that speed is the cornerstone of user experience. Bing have found that a 2 second delay reduces revenue by 4%. Google know that half a second delay drops traffic by 20%. AOL have shown that users with a speedy experience stay 50% longer than users who have to wait. The evidence is clear – speed matters.
What’s more, most latency comes from the front-end, not the backend so the fixes are not specific to a particular platform. This session will examine a range of techniques from DOM & CSS tricks to web server and HTTP tweaks that can help improve front-end performance by 25-50%.
Whether you’re looking to save bandwidth, increase your conversion rate, retain visitors, save time or just make your users happy – the speed of your site matters.
Composer is the de-facto php dependency management tool of the future. An ever-increasing number of useful open-source libraries are available for easy use via Packagist, the standard repository manager for Composer. As more and more Drupal contrib modules begin to depend on external libraries from Packagist, the motivation to use Composer to manage grows stronger; since Drupal 8 Core, and Drush 7 are now also using Composer to manage dependencies, the best way to ensure that all of the requirements are resolved correctly is to manage everything from a top-level project composer.json file.
This deck examines the different ways that Composer can be used to manage your project code, and how these new practices will influence how you use Drush and deploy code.
Watch the session video: https://www.youtube.com/watch?v=WNS3d_wzZ2Y
Highly available Drupal on a Raspberry Pi clusterJeff Geerling
Question: Can you run a Fortune 500 Drupal 8 website from your basement, on a cluster of Raspberry Pi computers?
Answer: See this presentation to find out! Jeff Geerling is the author of Ansible for DevOps and a Technical Architect at Acquia, who has worked on many large and small scale Drupal websites.
These are the slides of a talk I presented at WordCamp Nijmegen 2018, on august 31st. In this talk I show a couple of techniques that can be used to scale a WordPress site with a severely limited budget.
October 14 2009 New York Web Performance Group Session.
Rusty Conover is talking about his experience at InfoGears building Content Delivery Network (CDN) on top of Amazon EC2
Al Tobey (@AlTobey) is an Open Source Mechanic at DataStax. Prior to working at DataStax, Al was a Tech Lead of Compute and Data Services at Ooyala, which has been using Apache Cassandra since version 0.4 and these days uses Go in production.
Al will be presenting a brief introduction to Go (#golang) and Cassandra, and how they are a great fit for each other. This talk will include code samples and a live demo.
Performance is fundamentally, a UX concern. Sites that are slow to render or janky to interact with are a bad user experience. We strive to write performant code for our users, but users don’t directly interact with our code - it all happens through the medium of the browser. The browser is the middleman between us and our users; therefore to make our users happy, we first have to make the browser happy. But how exactly do we do that?
In this talk, we’ll learn how browsers work under the hood: how they request, construct, and render a website. At each step along the way, we’ll cover what we can do as developers to make the browser’s job easier, and why those best practices work. You’ll leave with a solid understanding of how to write code that works *with* the browser, not against it, and ultimately improves your users’ experience.
Happy Browser, Happy User! NY Web Performance Meetup 9/20/19Katie Sylor-Miller
xPerformance is fundamentally, a UX concern. Sites that are slow to render or janky to interact with are a bad user experience. We strive to write performant code for our users, but users don’t directly interact with our code - it all happens through the medium of the browser.
The browser is the middleman between us and our users; therefore to make our users happy, we first have to make the browser happy. But how exactly do we do that?
In this talk, we’ll learn how browsers work under the hood: how they request, construct, and render a website. At each step along the way, we’ll cover what we can do as developers to make the browser’s job easier, and why those best practices work. You’ll leave with a solid understanding of how to write code that works *with* the browser, not against it, and ultimately improves your users’ experience.
Reverse proxy & web cache with NGINX, HAProxy and VarnishEl Mahdi Benzekri
Discover the very wide world of web servers, in addition to the basic web deliverance fonctionnality, we will cover the reverse proxy, the resource caching and the load balancing.
Nginx and apache HTTPD will be used as web server and reverse proxy, and to illustrate some caching features we will also present varnish a powerful caching server.
To introduce load balancers we will compare between Nginx and Haproxy.
This presentation explains how to deploy and use the Integrated Caching feature on Netscaler. I gave this presentation to Citrix staff, customers and partners in worldwide in 2011. The presentation covers best practices and gotchas :) Integrated Caching is an excellent feature that can greatly improve the performance of your website.
As we build richer, more complex web applications it’s easy to forget that speed is the cornerstone of user experience. Bing have found that a 2 second delay reduces revenue by 4%. Google know that half a second delay drops traffic by 20%. AOL have shown that users with a speedy experience stay 50% longer than users who have to wait. The evidence is clear – speed matters.
What’s more, most latency comes from the front-end, not the backend so the fixes are not specific to a particular platform. This session will examine a range of techniques from DOM & CSS tricks to web server and HTTP tweaks that can help improve front-end performance by 25-50%.
Whether you’re looking to save bandwidth, increase your conversion rate, retain visitors, save time or just make your users happy – the speed of your site matters.
Composer is the de-facto php dependency management tool of the future. An ever-increasing number of useful open-source libraries are available for easy use via Packagist, the standard repository manager for Composer. As more and more Drupal contrib modules begin to depend on external libraries from Packagist, the motivation to use Composer to manage grows stronger; since Drupal 8 Core, and Drush 7 are now also using Composer to manage dependencies, the best way to ensure that all of the requirements are resolved correctly is to manage everything from a top-level project composer.json file.
This deck examines the different ways that Composer can be used to manage your project code, and how these new practices will influence how you use Drush and deploy code.
Watch the session video: https://www.youtube.com/watch?v=WNS3d_wzZ2Y
Highly available Drupal on a Raspberry Pi clusterJeff Geerling
Question: Can you run a Fortune 500 Drupal 8 website from your basement, on a cluster of Raspberry Pi computers?
Answer: See this presentation to find out! Jeff Geerling is the author of Ansible for DevOps and a Technical Architect at Acquia, who has worked on many large and small scale Drupal websites.
These are the slides of a talk I presented at WordCamp Nijmegen 2018, on august 31st. In this talk I show a couple of techniques that can be used to scale a WordPress site with a severely limited budget.
October 14 2009 New York Web Performance Group Session.
Rusty Conover is talking about his experience at InfoGears building Content Delivery Network (CDN) on top of Amazon EC2
Al Tobey (@AlTobey) is an Open Source Mechanic at DataStax. Prior to working at DataStax, Al was a Tech Lead of Compute and Data Services at Ooyala, which has been using Apache Cassandra since version 0.4 and these days uses Go in production.
Al will be presenting a brief introduction to Go (#golang) and Cassandra, and how they are a great fit for each other. This talk will include code samples and a live demo.
Performance is fundamentally, a UX concern. Sites that are slow to render or janky to interact with are a bad user experience. We strive to write performant code for our users, but users don’t directly interact with our code - it all happens through the medium of the browser. The browser is the middleman between us and our users; therefore to make our users happy, we first have to make the browser happy. But how exactly do we do that?
In this talk, we’ll learn how browsers work under the hood: how they request, construct, and render a website. At each step along the way, we’ll cover what we can do as developers to make the browser’s job easier, and why those best practices work. You’ll leave with a solid understanding of how to write code that works *with* the browser, not against it, and ultimately improves your users’ experience.
Happy Browser, Happy User! NY Web Performance Meetup 9/20/19Katie Sylor-Miller
xPerformance is fundamentally, a UX concern. Sites that are slow to render or janky to interact with are a bad user experience. We strive to write performant code for our users, but users don’t directly interact with our code - it all happens through the medium of the browser.
The browser is the middleman between us and our users; therefore to make our users happy, we first have to make the browser happy. But how exactly do we do that?
In this talk, we’ll learn how browsers work under the hood: how they request, construct, and render a website. At each step along the way, we’ll cover what we can do as developers to make the browser’s job easier, and why those best practices work. You’ll leave with a solid understanding of how to write code that works *with* the browser, not against it, and ultimately improves your users’ experience.
Design is problem solving. Each and every day, we are tasked with finding ways to reduce the friction our users experience on the Web. That means streamlining flows, reducing cognitive load, and writing more appropriate copy, but user experience goes far beyond the interface. Our users’ experiences begin with their first request to our servers. In this intensely practical session, Aaron will explore the ins and outs of page load performance by showing how he made the web site of the 10K Apart meet its own contest rules, by having a site that was functional and attractive even without JavaScript, and was less than ten kilobytes at initial load. You’ll walk away with a better understanding of the page load process as well as numerous ways you can improve the projects you are working on right now.
YGLF 2015 - Boom Performance | Eran Zinman (daPulse)Eran Zinman
Client performance is what shapes your product and determines the satisfaction of your users. Users don't expect things to happen fast, they expect things to happen immediately. In the presentation we will cover some real-life examples of how to greatly improve performance in web products and share a lot of tricks and cool stuff we've learned along the way.
Presented in the YGLF conference in Israel by Eran Zinman (dapulse.com)
Why speed is something developers should be in charge of? Product people rarely know what to ask “Can you make this faster?” Invest in speed, It’s one of the best things to spend your time on.
More and more often we talks about optimizing the server-side software, but the
true optimization must be done on the client where 80% of the time is spent
by users. The talk explains the main techniques to optimize
Web site using HTTP protocols and rules to the base but rarely
used.
This is my latest version of my client side performance presentations. This has been presented at TechEd NZ 2009 & to a couple of .NET user groups around NZ. This presentation focuses on the basics of client-side performance tuning.
Sooner or later we all have to work with HTML, despite its verbosity. Those of us who claim to love HTML may just be victims of Stockholm Syndrome, both praising yet secretly loathing it.
Basho designer John Newman is making the trek from the swamps of Florida to show us the way. In the modern world of markup preprocessors, these alternative syntaxes allow you to write simpler, cleaner, more concise code in a shorter amount of time. Certain techniques can even allow your team members who may be less-tech-savvy to contribute content directly without forcing you to wire up a WYSIWYG style CMS.
This talk explores great alternatives to plain HTML and CSS, and covers how Basho put these tools together to facilitate a painless, team-oriented approach to building sites and web apps.
Even though the specification is still being written, HTML5 can be implemented for your website today. In this workshop presented by Christopher Schmitt focused on real world solutions, attendees will learn about the new HTML elements and their semantics, HTML5 form elements, incorporate audio and video without Flash, new JavaScript API like geolocation, and more.
Performance Optimization and JavaScript Best PracticesDoris Chen
Performance optimization and JavaScript best practices tips are discussed in the talk. Here are some of the tips:
Put stylesheets at the top (css)
Move scripts to the bottom (javascript)
Provide a clean separation of content, CSS, and JavaScript
De-reference unused objects
Think Asynchronous
Working with Objects
Defer Loading Resources
Use JSLint -- Code Quality Tool
Reduce the size of JavaScript file
gzip
General JavaScript Coding Best Practices
Use === Instead of ==
Eval = Bad
Don’t Use Short-Hand
Reduce Globals: Namespace
Don't Pass a String to "SetInterval" or "SetTimeOut"
Use {} Instead of New Object()
Use [] Instead of New Array()
Design Systems are most successful when they have a solid process in place to manage, maintain, and share component code across multiple teams and codebases. The best way to achieve this is to manage code using a version control system like Git. Git is the defacto industry standard tool for storing and editing code for a reason - it's powerful, scalable, flexible... but can be confusing or intimidating, whether you're a newbie or you use it every day!
In this workshop, Katie Sylor-Miller, the creator of OhShitGit.com, and co-author of The Design Systems Handbook, will teach you all you need to know to use Git as a tool for managing your Design System code.
We'll walk through everything you need to know to create, contribute to, maintain, and share your design system code as a standalone repo in Git. We'll go over how the fundamental structures in Git and how it all works under the hood. We'll create our own repos and get comfortable running common git commands in the terminal. We'll learn about best practices, workflows, and tools that will keep your commits in order and reduce the panic caused by merge conflicts. And, we'll cover some cool features in the Github UI to help you document, manage, and share your Design System code.
Raiders of the Fast Start: Frontend Performance Archaeology - Performance.now...Katie Sylor-Miller
Raiders of the Fast Start: Frontend Performance Archeology
There are a lot of books, articles, and online tutorials out there with fantastic advice on how to make your websites performant. It all seems easy in theory, but applying best practices to real-world code is anything but straightforward. Diagnosing and fixing frontend performance issues on a large legacy codebase is like being an archaeologist excavating the remains of a lost civilization. You don’t know what you will find until you start digging!
Pick up your trowels and come along with Etsy’s Frontend Systems team as we become archaeologists digging into frontend performance on our large, legacy mobile codebase. I’ll share real-life lessons you can use to guide your own excavations into legacy code:
What tools and metrics we used to diagnose issues and track progress.
How we went beyond server-driven best practices to focus on the client.
Which fixes successfully increased conversion, and which didn’t.
Our work, like all good archaeology, went beyond artifacts and unearthed new insights into our culture. We at Etsy pride ourselves on our culture of performance, but, like all cultures, it needs to adapt and reinvent itself to account for changes to the landscape. Based on what we’ve learned, we are making the case for a new, organization-wide, frontend-focused performance culture that will solve the problems we face today.
Raiders of the Fast Start: Frontend Performance Achaeology - Fluent 2018Katie Sylor-Miller
There are a lot of books, articles, and online tutorials out there with fantastic advice on how to make your websites performant. It all seems so easy in theory, but applying best practices to real-world code is anything but straightforward. Diagnosing and fixing frontend performance issues on a large legacy codebase is like being an archaeologist excavating the remains of a lost civilization. You don’t know what you will find until you start digging.
Pick up your trowels and join Katie Sylor-Miller to dig into frontend performance on Etsy’s large legacy mobile codebase, exploring real-life lessons you can use to guide your own excavations into legacy code and discovering how Etsy unearthed new insights into its culture. While Etsy prides itself on its culture of performance, like all cultures, it needs to adapt and reinvent itself to account for changes to the landscape. The company is now making the case for a new, organization-wide frontend-focused performance culture that will solve the problems we face today.
Topics include:
The open source tools and metrics Etsy used to diagnose issues and track progress
How Etsy went beyond server-driven best practices to focus on the client
The tools Etsy built to help find and delete old, unused code
Which fixes successfully increased conversion and which didn’t
We developers and designers are obsessed with getting our images “just right” before we display them to our users. We perfect their art direction, selecting images that set the right mood or convey the right information. We fine-tune their performance characteristics and ensure that we serve the right image for a multitude of devices. But what about users who can’t see our finely-tuned images or distinguish between the colors in our beautiful infographics? How do we ensure that our images are accessible so that everyone can experience your site to the fullest ?
In this session, we’ll learn about the different types of visual, auditory, cognitive, and motor impairments that affect how users interact with images and other media, and we’ll cover practical techniques for ensuring that your images are accessible to everyone, regardless of how they experience the web.
Raiders of the Fast Start: Frontend Performance Archaeology PerfmattersConf 2018Katie Sylor-Miller
There are a lot of books, articles, and online tutorials out there with fantastic advice on how to make your websites performant. It all seems easy in theory, but applying best practices to real-world code is anything but straightforward. Diagnosing and fixing frontend performance issues on a large legacy codebase is like being an archaeologist excavating the remains of a lost civilization. You don’t know what you will find until you start digging!
Pick up your trowels and come along with Etsy’s Frontend Systems team as we become archaeologists digging into frontend performance on our large, legacy mobile codebase. I’ll share real-life lessons you can use to guide your own excavations into legacy code:
What tools and metrics we used to diagnose issues and track progress.
How we went beyond server-driven best practices to focus on the client.
Which fixes successfully increased conversion, and which didn’t.
Our work, like all good archaeology, went beyond artifacts and unearthed new insights into our culture. We at Etsy pride ourselves on our culture of performance, but, like all cultures, it needs to adapt and reinvent itself to account for changes to the landscape. Based on what we’ve learned, we are making the case for a new, organization-wide, frontend-focused performance culture that will solve the problems we face today.
Presentation from https://perfmattersconf.com/
Git, the widely popular version control tool that just about everyone who works on the web seems to use, is powerful, scalable, flexible. . .and difficult to learn. If you’ve used Git for any amount of time, you’ve probably gotten yourself into some confusing, frustrating, or downright terrifying situations. But don’t panic. You are not alone. Katie Sylor-Miller explains how to avoid getting into Git messes in the first place, demonstrating how the fundamental structures in Git actually work under the hood and sharing best practices, workflows, and tools that will keep your commits in order and reduce the panic caused by merge conflicts. Katie then shows you how to leverage Git’s powerful features to save yourself when everything seems to go wrong.
From FrontendConf Zurich 2016
As the web development landscape rapidly changes, good communication and collaboration between multiple job functions is key to not just a project’s success, but to a successful career as a front end developer. In this talk, we’ll discuss why it is important to grow yourself into a “T-shaped” developer - someone with deep knowledge in front end development, who can collaborate across multiple other disciplines. You'll leave knowing how to incorporate essential empathy and communication skills into your daily work life, leveling up your career, and the career of those around you.
Explore the innovative world of trenchless pipe repair with our comprehensive guide, "The Benefits and Techniques of Trenchless Pipe Repair." This document delves into the modern methods of repairing underground pipes without the need for extensive excavation, highlighting the numerous advantages and the latest techniques used in the industry.
Learn about the cost savings, reduced environmental impact, and minimal disruption associated with trenchless technology. Discover detailed explanations of popular techniques such as pipe bursting, cured-in-place pipe (CIPP) lining, and directional drilling. Understand how these methods can be applied to various types of infrastructure, from residential plumbing to large-scale municipal systems.
Ideal for homeowners, contractors, engineers, and anyone interested in modern plumbing solutions, this guide provides valuable insights into why trenchless pipe repair is becoming the preferred choice for pipe rehabilitation. Stay informed about the latest advancements and best practices in the field.
About
Indigenized remote control interface card suitable for MAFI system CCR equipment. Compatible for IDM8000 CCR. Backplane mounted serial and TCP/Ethernet communication module for CCR remote access. IDM 8000 CCR remote control on serial and TCP protocol.
• Remote control: Parallel or serial interface.
• Compatible with MAFI CCR system.
• Compatible with IDM8000 CCR.
• Compatible with Backplane mount serial communication.
• Compatible with commercial and Defence aviation CCR system.
• Remote control system for accessing CCR and allied system over serial or TCP.
• Indigenized local Support/presence in India.
• Easy in configuration using DIP switches.
Technical Specifications
Indigenized remote control interface card suitable for MAFI system CCR equipment. Compatible for IDM8000 CCR. Backplane mounted serial and TCP/Ethernet communication module for CCR remote access. IDM 8000 CCR remote control on serial and TCP protocol.
Key Features
Indigenized remote control interface card suitable for MAFI system CCR equipment. Compatible for IDM8000 CCR. Backplane mounted serial and TCP/Ethernet communication module for CCR remote access. IDM 8000 CCR remote control on serial and TCP protocol.
• Remote control: Parallel or serial interface
• Compatible with MAFI CCR system
• Copatiable with IDM8000 CCR
• Compatible with Backplane mount serial communication.
• Compatible with commercial and Defence aviation CCR system.
• Remote control system for accessing CCR and allied system over serial or TCP.
• Indigenized local Support/presence in India.
Application
• Remote control: Parallel or serial interface.
• Compatible with MAFI CCR system.
• Compatible with IDM8000 CCR.
• Compatible with Backplane mount serial communication.
• Compatible with commercial and Defence aviation CCR system.
• Remote control system for accessing CCR and allied system over serial or TCP.
• Indigenized local Support/presence in India.
• Easy in configuration using DIP switches.
Student information management system project report ii.pdfKamal Acharya
Our project explains about the student management. This project mainly explains the various actions related to student details. This project shows some ease in adding, editing and deleting the student details. It also provides a less time consuming process for viewing, adding, editing and deleting the marks of the students.
Immunizing Image Classifiers Against Localized Adversary Attacksgerogepatton
This paper addresses the vulnerability of deep learning models, particularly convolutional neural networks
(CNN)s, to adversarial attacks and presents a proactive training technique designed to counter them. We
introduce a novel volumization algorithm, which transforms 2D images into 3D volumetric representations.
When combined with 3D convolution and deep curriculum learning optimization (CLO), itsignificantly improves
the immunity of models against localized universal attacks by up to 40%. We evaluate our proposed approach
using contemporary CNN architectures and the modified Canadian Institute for Advanced Research (CIFAR-10
and CIFAR-100) and ImageNet Large Scale Visual Recognition Challenge (ILSVRC12) datasets, showcasing
accuracy improvements over previous techniques. The results indicate that the combination of the volumetric
input and curriculum learning holds significant promise for mitigating adversarial attacks without necessitating
adversary training.
Final project report on grocery store management system..pdfKamal Acharya
In today’s fast-changing business environment, it’s extremely important to be able to respond to client needs in the most effective and timely manner. If your customers wish to see your business online and have instant access to your products or services.
Online Grocery Store is an e-commerce website, which retails various grocery products. This project allows viewing various products available enables registered users to purchase desired products instantly using Paytm, UPI payment processor (Instant Pay) and also can place order by using Cash on Delivery (Pay Later) option. This project provides an easy access to Administrators and Managers to view orders placed using Pay Later and Instant Pay options.
In order to develop an e-commerce website, a number of Technologies must be studied and understood. These include multi-tiered architecture, server and client-side scripting techniques, implementation technologies, programming language (such as PHP, HTML, CSS, JavaScript) and MySQL relational databases. This is a project with the objective to develop a basic website where a consumer is provided with a shopping cart website and also to know about the technologies used to develop such a website.
This document will discuss each of the underlying technologies to create and implement an e- commerce website.
5. @ksylor
UX
WHAT MAKES USERS HAPPY?
▸ Fast rendering of content
(e.g. "fast loading")
▸ Instant feedback for clicks/taps/
keyboard interactions
▸ Smooth animations
▸ Don't use up their mobile data!
16. @ksylor
NAVIGATION - CONNECTION
https://mindblowncat.com
the
internet
3. SSL handshake
ClientHello
ServerHello & Certificate
Client key
FINISHED
FINISHED
1. DNS lookup
DNS server
what is the IP address for
mindblowncat.com?
162.144.26.144
SYN
SYN ACK
ACK
2. TCP handshake
mindblowncat.com
162.144.26.144
17. @ksylor
NAVIGATION - CONNECTION
https://mindblowncat.com
the
internet
3. SSL handshake
ClientHello
ServerHello & Certificate
Client key
FINISHED
FINISHED
1. DNS lookup
DNS server
what is the IP address for
mindblowncat.com?
162.144.26.144
SYN
SYN ACK
ACK
2. TCP handshake
4. Request
mindblowncat.com
162.144.26.144
HTTP GET
18. @ksylor
NAVIGATION - CONNECTION
https://mindblowncat.com
the
internet
3. SSL handshake
ClientHello
ServerHello & Certificate
Client key
FINISHED
FINISHED
1. DNS lookup
DNS server
what is the IP address for
mindblowncat.com?
162.144.26.144
SYN
SYN ACK
ACK
2. TCP handshake
4. Request
mindblowncat.com
162.144.26.144
HTTP GET
5. SERVER STUFF
6. SEND RESPONSE
19. @ksylor
NAVIGATION - CONNECTION
https://mindblowncat.com
the
internet
3. SSL handshake
ClientHello
ServerHello & Certificate
Client key
FINISHED
FINISHED
1. DNS lookup
DNS server
what is the IP address for
mindblowncat.com?
162.144.26.144
SYN
SYN ACK
ACK
2. TCP handshake
4. Request
mindblowncat.com
162.144.26.144
HTTP GET
5. SERVER STUFF
6. SEND RESPONSE
ACK
2nd HTTP RESPONSE (29kb)
3rd HTTP RESPONSE (57kb)
ACK
etc…
1st HTTP RESPONSE (14kb)
7. TTFB
20. @ksylor
NAVIGATION - CONNECTION
https://mindblowncat.com
the
internet
3. SSL handshake
ClientHello
ServerHello & Certificate
Client key
FINISHED
FINISHED
1. DNS lookup
DNS server
what is the IP address for
mindblowncat.com?
162.144.26.144
SYN
SYN ACK
ACK
2. TCP handshake
4. Request
mindblowncat.com
162.144.26.144
HTTP GET
5. SERVER STUFF
6. SEND RESPONSE
ACK
2nd HTTP RESPONSE (29kb)
3rd HTTP RESPONSE (57kb)
ACK
etc…
1st HTTP RESPONSE (14kb)
7. TTFB
8. Parse
21. @ksylor
NAVIGATION
WHAT DO WE CONTROL?
▸ Reduce server response time
▸ Cache cache cache cache cache
▸ Use a CDN
▸ Smaller files = fewer roundtrips
▸ Compression, tree-shaking, code-splitting
▸ First 14kb
▸ Preloading/prefetching, resource hints, HTTP/2
22. @ksylor
HOW DO BROWSERS WORK?
https://mindblowncat.com
4 PHASES
▸ Navigation
▸ Parsing
▸ Rendering
▸ Interaction
26. @ksylor
PARSING - HTML TO DOM
HTML
html
DOM NETWORK
RESPONSE HTML
Main
Worker
Network
Process
<html>
<head>
<title>Cats are fun!</title>
<link href="style.css".../>
<script src="script.js"></script>
</head>
<body>
<h1 class="title">Hi!</h1>
<p>Here is a cat.
<div class="border">
<img src="cat.gif" id="cat"
alt="Cat!"/>
</div>
</body>
</html>
27. @ksylor
<html>
<head>
<title>Cats are fun!</title>
<link href="style.css".../>
<script src="script.js"></script>
</head>
<body>
<h1 class="title">Hi!</h1>
<p>Here is a cat.
<div class="border">
<img src="cat.gif" id="cat"
alt="Cat!"/>
</div>
</body>
</html>
PARSING - HTML TO DOM
HTML
html
DOM
REQUEST STYLE.CSS
NETWORK
RESPONSE HTML
REQUEST SCRIPT.JS
REQUEST CAT.JPG
Main
Worker
Network
Process
28. @ksylor
<html>
<head>
<title>Cats are fun!</title>
<link href="style.css".../>
<script src="script.js"></script>
</head>
<body>
<h1 class="title">Hi!</h1>
<p>Here is a cat.
<div class="border">
<img src="cat.gif" id="cat"
alt="Cat!"/>
</div>
</body>
</html>
PARSING - HTML TO DOM
HTML
html
DOM
head
REQUEST STYLE.CSS
NETWORK
RESPONSE HTML
REQUEST SCRIPT.JS
REQUEST CAT.JPG
Main
Worker
Network
Process
29. @ksylor
<html>
<head>
<title>Cats are fun!</title>
<link href="style.css".../>
<script src="script.js"></script>
</head>
<body>
<h1 class="title">Hi!</h1>
<p>Here is a cat.
<div class="border">
<img src="cat.gif" id="cat"
alt="Cat!"/>
</div>
</body>
</html>
PARSING - HTML TO DOM
HTML
html
DOM
head
title
REQUEST STYLE.CSS
NETWORK
RESPONSE HTML
REQUEST SCRIPT.JS
REQUEST CAT.JPG
Main
Worker
Network
Process
30. @ksylor
<html>
<head>
<title>Cats are fun!</title>
<link href="style.css".../>
<script src="script.js"></script>
</head>
<body>
<h1 class="title">Hi!</h1>
<p>Here is a cat.
<div class="border">
<img src="cat.gif" id="cat"
alt="Cat!"/>
</div>
</body>
</html>
PARSING - HTML TO DOM
HTML
html
DOM
head
title
REQUEST STYLE.CSS
NETWORK
link
RESPONSE HTML
REQUEST SCRIPT.JS
REQUEST CAT.JPG
Main
Worker
Network
Process
31. @ksylor
PARSING - HTML TO DOM
HTML
html
DOM
head
link
title
<html>
<head>
<title>Cats are fun!</title>
<link href="style.css".../>
<script src="script.js"></script>
</head>
<body>
<h1 class="title">Hi!</h1>
<p>Here is a cat.
<div class="border">
<img src="cat.gif" id="cat"
alt="Cat!"/>
</div>
</body>
</html>
REQUEST STYLE.CSS
NETWORK
RESPONSE HTML
REQUEST SCRIPT.JS
script
REQUEST CAT.JPG
Main
Worker
Network
Process
32. @ksylor
PARSING - HTML TO DOM
HTML
html
DOM
head
link
title
<html>
<head>
<title>Cats are fun!</title>
<link href="style.css".../>
<script src="script.js"></script>
</head>
<body>
<h1 class="title">Hi!</h1>
<p>Here is a cat.
<div class="border">
<img src="cat.gif" id="cat"
alt="Cat!"/>
</div>
</body>
</html>
REQUEST STYLE.CSS
NETWORK
RESPONSE HTML
REQUEST SCRIPT.JS
script
REQUEST CAT.JPG
JAVASCRIPT IS RENDER BLOCKING*
*when included without defer or async attributes
Main
Worker
Network
Process
33. @ksylor
PARSING - HTML TO DOM
HTML
html
DOM
head
link
title
<html>
<head>
<title>Cats are fun!</title>
<link href="style.css".../>
<script src="script.js"></script>
</head>
<body>
<h1 class="title">Hi!</h1>
<p>Here is a cat.
<div class="border">
<img src="cat.gif" id="cat"
alt="Cat!"/>
</div>
</body>
</html>
REQUEST STYLE.CSS
NETWORK
RESPONSE HTML
REQUEST SCRIPT.JS
script
REQUEST CAT.JPG
BUT FIRST... CSS BLOCKS JS
RESPONSE STYLE.CSS
Main
Worker
Network
Process
41. @ksylor
PARSING - HTML TO DOM
HTML
html
DOM
head
link
title
<html>
<head>
<title>Cats are fun!</title>
<link href="style.css".../>
<script src="script.js"></script>
</head>
<body>
<h1 class="title">Hi!</h1>
<p>Here is a cat.
<div class="border">
<img src="cat.gif" id="cat"
alt="Cat!"/>
</div>
</body>
</html>
REQUEST STYLE.CSS
NETWORK
RESPONSE HTML
REQUEST SCRIPT.JS
script
REQUEST CAT.JPG
RESPONSE SCRIPT.JS
RESPONSE STYLE.CSS
Main
Worker
Network
Process
43. @ksylor
PARSING- JAVASCRIPT AST
JS ASTJS
function badIdea() {
var cat =
document.getElementById("cat");
cat.src = "another-cat.gif";
}
badIdea();
Program
body:
Main
Worker
Network
Process
go to: https://astexplorer.net
44. @ksylor
PARSING- JAVASCRIPT TO ABSTRACT SYNTAX TREE (AST)
ASTJS
function badIdea() {
var cat =
document.getElementById("cat");
cat.src = "another-cat.gif";
}
badIdea();
Main
Program
body:
FunctionDeclaration
id:
body:
45. @ksylor
PARSING- JAVASCRIPT TO ABSTRACT SYNTAX TREE (AST)
ASTJS
function badIdea() {
var cat =
document.getElementById("cat");
cat.src = "another-cat.gif";
}
badIdea();
Main
Program
FunctionDeclaration
Identifier
name: "badIdea"
id:
body:
body:
46. @ksylor
PARSING- JAVASCRIPT TO ABSTRACT SYNTAX TREE (AST)
ASTJS
function badIdea() {
var cat =
document.getElementById("cat");
cat.src = "another-cat.gif";
}
badIdea();
Main
Program
FunctionDeclaration
Identifier
name: "badIdea"
id:
body: BlockStatement
body:
47. @ksylor
VariableDeclaration
body:
id:
init:
PARSING- JAVASCRIPT TO ABSTRACT SYNTAX TREE (AST)
ASTJS
function badIdea() {
var cat =
document.getElementById("cat");
cat.src = "another-cat.gif";
}
badIdea();
Main
Program
FunctionDeclaration
Identifier
name: "badIdea"
id:
body: BlockStatement
body:
48. @ksylor
PARSING- JAVASCRIPT TO ABSTRACT SYNTAX TREE (AST)
ASTJS
function badIdea() {
var cat =
document.getElementById("cat");
cat.src = "another-cat.gif";
}
badIdea();
Main
Program
FunctionDeclaration
VariableDeclaration
Identifier
name: "badIdea"
id:
id:
body:
Identifier
name: "cat"
BlockStatement
body:
body:
init:
49. @ksylor
PARSING- JAVASCRIPT TO ABSTRACT SYNTAX TREE (AST)
ASTJS
function badIdea() {
var cat =
document.getElementById("cat");
cat.src = "another-cat.gif";
}
badIdea();
Main
Program
FunctionDeclaration
Identifier
name: "cat"
VariableDeclaration
Identifier
name: "badIdea"
id:
init:
id:
body: BlockStatement
body:
body:
CallExpression
callee:
arguments:
50. @ksylor
PARSING- JAVASCRIPT TO ABSTRACT SYNTAX TREE (AST)
ASTJS
function badIdea() {
var cat =
document.getElementById("cat");
cat.src = "another-cat.gif";
}
badIdea();
Main
Program
FunctionDeclaration
Identifier
name: "cat"
VariableDeclaration
Identifier
name: "badIdea"
CallExpression
id:
init:
id:
body: BlockStatement
body:
body:
callee:
arguments:
MemberExpression
object:
property:
51. @ksylor
PARSING- JAVASCRIPT TO ABSTRACT SYNTAX TREE (AST)
ASTJS
function badIdea() {
var cat =
document.getElementById("cat");
cat.src = "another-cat.gif";
}
badIdea();
Main
Program
FunctionDeclaration
Identifier
name: "cat"
VariableDeclaration
Identifier
name: "badIdea"
CallExpression
id:
init:
id:
body: BlockStatement
body:
body:
MemberExpressioncallee:
object: Identifier
name: "document"
property:
arguments:
52. @ksylor
PARSING- JAVASCRIPT TO ABSTRACT SYNTAX TREE (AST)
ASTJS
function badIdea() {
var cat =
document.getElementById("cat");
cat.src = "another-cat.gif";
}
badIdea();
Main
Program
FunctionDeclaration
Identifier
name: "cat"
VariableDeclaration
Identifier
name: "badIdea"
CallExpression
id:
init:
id:
body: BlockStatement
body:
body:
Identifier
name: "document"
MemberExpressioncallee:
object:
property: Identifier
name: "getElementById"
arguments:
53. @ksylor
PARSING- JAVASCRIPT TO ABSTRACT SYNTAX TREE (AST)
ASTJS
function badIdea() {
var cat =
document.getElementById("cat");
cat.src = "another-cat.gif";
}
badIdea();
Main
Program
FunctionDeclaration
Identifier
name: "cat"
VariableDeclaration
Identifier
name: "document"
Identifier
name: "badIdea"
MemberExpression
CallExpression
id:
init:
callee:
object:
Identifier
name: "getElementById"
id:
body: BlockStatement
Literal
value:"cat"
arguments:
body:
body:
property:
54. @ksylor
PARSING- JAVASCRIPT TO ABSTRACT SYNTAX TREE (AST)
ASTJS
function badIdea() {
var cat =
document.getElementById("cat");
cat.src = "another-cat.gif";
}
badIdea();
Main
Program
FunctionDeclaration
Identifier
name: "cat"
VariableDeclaration
Identifier
name: "badIdea"
CallExpression
id:
init:
id:
body: BlockStatement
body:
body:
Identifier
name: "document"
MemberExpressioncallee:
object:
property: Identifier
name: "getElementById"
Literal
value:"cat"
arguments:
ExpressionStatement
AssignmentExpression
operator: "="
left:
right:
expression:
65. @ksylor
PARSING - HTML TO DOM (AGAIN)
HTML
html
DOM
head
link
title
<html>
<head>
<title>Cats are fun!</title>
<link href="style.css".../>
<script src="script.js"></script>
</head>
<body>
<h1 class="title">Hi!</h1>
<p>Here is a cat.
<div class="border">
<img src="cat.gif" id="cat"
alt="Cat!"/>
</div>
</body>
</html>
REQUEST STYLE.CSS
NETWORK
RESPONSE HTML
REQUEST SCRIPT.JS
script
REQUEST CAT.JPG
RESPONSE SCRIPT.JS
RESPONSE STYLE.CSS
Main
Worker
Network
Process
66. @ksylor
<html>
<head>
<title>Cats are fun!</title>
<link href="style.css".../>
<script src="script.js"></script>
</head>
<body>
<h1 class="title">Hi!</h1>
<p>Here is a cat.
<div class="border">
<img src="cat.gif" id="cat"
alt="Cat!"/>
</div>
</body>
</html>
PARSING - HTML TO DOM (AGAIN)
HTML
html
DOM
head
link
title
NETWORK
script
REQUEST STYLE.CSS
RESPONSE HTML
REQUEST SCRIPT.JS
REQUEST CAT.JPG
RESPONSE SCRIPT.JS
RESPONSE STYLE.CSS
Main
Worker
Network
Process
67. @ksylor
<html>
<head>
<title>Cats are fun!</title>
<link href="style.css".../>
<script src="script.js"></script>
</head>
<body>
<h1 class="title">Hi!</h1>
<p>Here is a cat.
<div class="border">
<img src="cat.gif" id="cat"
alt="Cat!"/>
</div>
</body>
</html>
PARSING - HTML TO DOM (AGAIN)
HTML
html
DOM
head
link
title
NETWORK
body
script
REQUEST STYLE.CSS
RESPONSE HTML
REQUEST SCRIPT.JS
REQUEST CAT.JPG
RESPONSE SCRIPT.JS
RESPONSE STYLE.CSS
Main
Worker
Network
Process
68. @ksylor
<html>
<head>
<title>Cats are fun!</title>
<link href="style.css".../>
<script src="script.js"></script>
</head>
<body>
<h1 class="title">Hi!</h1>
<p>Here is a cat.
<div class="border">
<img src="cat.gif" id="cat"
alt="Cat!"/>
</div>
</body>
</html>
PARSING - HTML TO DOM (AGAIN)
HTML
html
DOM
head
link
title
NETWORK
body
h1
class:“title”
Hi!
script
REQUEST STYLE.CSS
RESPONSE HTML
REQUEST SCRIPT.JS
REQUEST CAT.JPG
RESPONSE SCRIPT.JS
RESPONSE STYLE.CSS
Main
Worker
Network
Process
69. @ksylor
<html>
<head>
<title>Cats are fun!</title>
<link href="style.css".../>
<script src="script.js"></script>
</head>
<body>
<h1 class="title">Hi!</h1>
<p>Here is a cat.
<div class="border">
<img src="cat.gif" id="cat"
alt="Cat!"/>
</div>
</body>
</html>
PARSING - HTML TO DOM (AGAIN)
HTML
html
DOM
head
link
title
NETWORK
paragraph
Here is a cat.
body
h1
class:“title”
Hi!
script
REQUEST STYLE.CSS
RESPONSE HTML
REQUEST SCRIPT.JS
REQUEST CAT.JPG
RESPONSE SCRIPT.JS
RESPONSE STYLE.CSS
Main
Worker
Network
Process
70. @ksylor
<html>
<head>
<title>Cats are fun!</title>
<link href="style.css".../>
<script src="script.js"></script>
</head>
<body>
<h1 class="title">Hi!</h1>
<p>Here is a cat.
<div class="border">
<img src="cat.gif" id="cat"
alt="Cat!"/>
</div>
</body>
</html>
PARSING - HTML TO DOM (AGAIN)
HTML
html
DOM
head
link
title
NETWORK
paragraph
Here is a cat.
div
class:”border”
body
h1
class:“title”
Hi!
script
REQUEST STYLE.CSS
RESPONSE HTML
REQUEST SCRIPT.JS
REQUEST CAT.JPG
RESPONSE SCRIPT.JS
RESPONSE STYLE.CSS
Main
Worker
Network
Process
71. @ksylor
<html>
<head>
<title>Cats are fun!</title>
<link href="style.css".../>
<script src="script.js"></script>
</head>
<body>
<h1 class="title">Hi!</h1>
<p>Here is a cat.
<div class="border">
<img src="cat.gif" id="cat"
alt="Cat!"/>
</div>
</body>
</html>
PARSING - HTML TO DOM (AGAIN)
HTML
html
DOM
head
link
title
NETWORK
paragraph
div
class:”border”
Here is a cat.
body
h1
class:“title”
Hi!
script
REQUEST STYLE.CSS
RESPONSE HTML
REQUEST SCRIPT.JS
REQUEST CAT.JPG
RESPONSE SCRIPT.JS
RESPONSE STYLE.CSS
image
id="cat"
Main
Worker
Network
Process
72. @ksylor
<html>
<head>
<title>Cats are fun!</title>
<link href="style.css".../>
<script src="script.js"></script>
</head>
<body>
<h1 class="title">Hi!</h1>
<p>Here is a cat.
<div class="border">
<img src="cat.gif" id="cat"
alt="Cat!"/>
</div>
</body>
</html>
PARSING - HTML TO DOM (AGAIN)
HTML
html
DOM
head
link
title
NETWORK
paragraph
div
class:”border”
Here is a cat.
body
h1
class:“title”
Hi!
script
image
id="cat"
REQUEST STYLE.CSS
RESPONSE HTML
REQUEST SCRIPT.JS
REQUEST CAT.JPG
RESPONSE SCRIPT.JS
RESPONSE STYLE.CSS
Main
Worker
Network
Process
86. @ksylor
+ BROWSER DEFAULT STYLES
+ USER-PROVIDED STYLESHEETS
RENDERING - STYLE CALCULATION
html
DOM
head
link
title
body
h1
class:“title”
paragraph
image
div
class:”border”
Hi!
Here is a cat.
CSSOM
body
font-family: sans-serif;
.border
border: 1px solid gray;
img
display:block;
margin: 1em;
.title
font-family: serif;
COMPUTED STYLE
root
<body>
font-family: sans-serif;
<h1>
color: magenta;
font-family: serif;
Hi!
<p>
font-family: sans-serif;
<div>
border: 1px solid gray;
font-family: sans-serif;
<img>
display:block;
margin: 1em;
Here is a cat.
h1
color: magenta;
script
Main Raster/
Compositor
Network
Process
93. @ksylor
RENDERING - LAYOUT
html/viewport
body
h1
Hi!
Here is a cat. p
root/html
<body>
font-family: sans-serif;
<h1>
color: magenta;
font-family: serif;
Hi!
<p>
font-family: sans-serif;
<div>
border: 1px solid gray;
font-family: sans-serif;
<img>
display:block;
margin: 1em;
Here is a cat.
COMPUTED STYLE
Main Raster/
Compositor
Network
Process
94. @ksylor
root/html
<body>
font-family: sans-serif;
<h1>
color: magenta;
font-family: serif;
Hi!
<p>
font-family: sans-serif;
<div>
border: 1px solid gray;
font-family: sans-serif;
<img>
display:block;
margin: 1em;
Here is a cat.
COMPUTED STYLE
RENDERING - LAYOUT
html/viewport
body
h1
Hi!
Here is a cat. p
div
Main Raster/
Compositor
Network
Process
95. @ksylor
RENDERING - LAYOUT
html/viewport
body
h1
Hi!
Here is a cat.
div
p
img
root/html
<body>
font-family: sans-serif;
<h1>
color: magenta;
font-family: serif;
Hi!
<p>
font-family: sans-serif;
<div>
border: 1px solid gray;
font-family: sans-serif;
<img>
display:block;
margin: 1em;
Here is a cat.
COMPUTED STYLE
Main Raster/
Compositor
Network
Process
99. @ksylor
RENDERING - PAINT
PIXELS ARE PAINTED ON LAYERS
RASTERIZE
Main Raster/
Compositor
Network
Process
*layers pictured are imaginary for
demonstration purposes only
▸ 3D transforms
▸ CSS animation using
opacity or transform
▸ will-change
▸ "accelerated" CSS
filters
▸ <video> or <canvas>
▸ z-index above another
layer
CREATE A NEW LAYER
112. @ksylor
THE TROUBLE WITH BROWSERS
THE MAIN THREAD DOES IT ALL
▸ Parsing HTML into DOM
▸ Parsing CSS into CSSOM
▸ JS into JS AST
▸ JS Execution
▸ Style Calculation (and re-style)
▸ Layout (and re-layout)
▸ Paint (and re-paint)
113. @ksylor
HOW DO BROWSERS WORK?
https://mindblowncat.com
4 PHASES
▸ Navigation
▸ Parsing
▸ Rendering
▸ Interaction
Hi!
Here is a cat.
114. @ksylor
INTERACTION
THE MAIN THREAD DOES IT ALL
▸ Parsing HTML into DOM
▸ Parsing CSS into CSSOM
▸ JS into JS AST
▸ JS Execution
▸ Style Calculation (and re-style)
▸ Layout (and re-layout)
▸ Paint (and re-paint)
▸ User interaction
116. @ksylor
INTERACTION - RESPOND TO INPUT
INPUT DELAY
parse & execute js
async request js
FirstPaint
style paint
composite
layoutparse html parse css parse html
preload scanner
DomInteractive &
DomContentLoaded
request html
Main
Worker
Network
Process
NavigationStart TTFB
User taps
button
First Input Delay
117. @ksylor
INTERACTION - RESPOND TO INPUT
UNBLOCK THE MAIN THREAD
▸ Ship less Javascript
▸ Code-splitting - load what you need to
render, then lazy load the rest
▸ Break up execution into smaller, async
tasks (requestIdleCallback)
▸ Measure first input delay and long tasks
▸ Audit frameworks, third party scripts, ads,
and trackers
121. @ksylor
INTERACTION - JANK
"DROPPING" FRAMES FROM THE MAIN THREAD
16.67ms
frame! frame!
re-style re-layoutjs event handler
button click opens
an overlay dialog
frame! frame! frame!
<div>'s style changes
from display: none;
to display: block;
re-paint
jank :( jank :( jank :( jank :(
re-composite
on the GPU
122. @ksylor
RENDERING - LAYERS
LAYERS ARE AWESOME
Main Raster/
Compositor
Network
Process
▸ Repaint only the layer that changed, all
other layers stay the same
▸ Easier to move/animate layers without
repainting the whole page.
▸ But layers are expensive in memory!
▸ Don't create layers that don't change how
the page is rendered.
124. @ksylor
INTERACTION - LESS JANK!
"DROPPING" FRAMES FROM THE MAIN THREAD
16.67ms
frame! frame!
stylejs event handler
button click opens
an overlay dialog
frame! frame! frame!
<div>'s style changes
from visibility: hidden;
to visibility: visible;
and uses css animations
jank :( jank :(
re-composite
on the GPU
frame! frame!frame!
125. @ksylor
HOW DO WE MAKE BROWSERS HAPPY?
https://mindblowncat.com
4 PHASES
▸ Navigation
GET IT OVER WITH!
▸ Parsing
DOM + CSSOM, ASAP
▸ Rendering
DO LESS WORK (ON THE CPU)
▸ Interaction
IMMEDIATE & JANK FREE
Hi!
Here is a cat.