Google PageSpeed is a free tool that assesses the performance and usability of your website for mobile and desktop platforms. It's extra important because Google uses it in determining key elements of our SEO ranking, i.e. how high we appear in their search results.
If you want more background about the benefits of increased site speed, read Moz's Why Site Speed Optimisation Should Be Part of Your SEO Strategy, which highlights, "...several case studies have shown faster loading pages strongly correlate to higher revenue."
In this tutorial, I'm going to walk you through some technical approaches to optimize your WordPress website's PageSpeed. While basic changes can be quite simple and easy, more comprehensive updates can actually be quite challenging.
Interestingly, custom websites may be easier to optimize than WordPress sites—it's because of the framework's extensive use of third-party themes and plugins. It's also based on an architecture that was designed before its popularity and relies on an imperfect architecture for backward compatibility.
Before we get started, please remember, I do try to participate in the discussions below. If you have a question or topic suggestion, please post a comment below or contact me on Twitter @reifman. I'm interested in your experience with WordPress and PageSpeed.
For this tutorial, I'm going to focus on improving my personal website, JeffReifman.com.
A while back, my PageSpeed was Mobile 65 and Desktop 64 — not that great:
Note: here's the article to read if you're curious about the funny mobile screenshot with Russell Wilson.
Before we get started on making optimizations, let's talk about some of the basic WordPress performance factors.
There are a few major ways to begin optimizing your WordPress site for performance and increased PageSpeed.
The PageSpeed of various themes is greatly affected by the number and size of JavaScript files and CSS they use, the number of images used and their size, and the approach of their mobile implementation, i.e. typically responsive nowadays.
If you're in the market for a new WordPress theme and want to evaluate PageSpeed, you may be surprised that the scores for well-known themes often run in the 60s and 70s but also up to the 90s. Here are a couple of articles assessing themes and PageSpeed via ColorLib and WPMU. In any case, I expected higher.
I've used My Site My Way's Construct theme for several years. Interestingly, the company's support site went silent recently, and they've left no explanation for users.
However, because there will be no more updates to the theme, it makes it a bit easier for me to make some radical changes to its performance for this tutorial without having to deal with future code updates from the company. I'll get to this shortly.
Using dedicated servers will very likely perform better than increasingly common and more affordable shared virtual servers. In the past, I've written about how to install WordPress at shared providers such as Digital Ocean. There's also the in-between of services like WP Engine, which offer an attention to developers and both shared and dedicated servers.
The quality of the host will matter too. A lot of bare-bones shared WordPress providers may provide inconsistent performance.
For example, I use the KnowHow theme on both Publishing with WordPress hosted at a Digital Ocean virtual server and Flee the Jungle hosted at WP Engine. The sites are fairly similar in content weight, e.g. text and image usage. The PageSpeed for Publishing with WordPress's PageSpeed is Mobile 73 and Desktop 88, while Flee the Jungle at WP Engine was a bit faster (Mobile 78 and Desktop 91); WP Engine's managed hosting is a bit faster than my self-hosting with a shared server.
I've also seen poor performance with Amazon's low-end AWS hosting. You get what you pay for.
WordPress caching is critical for performance, and I've regularly written about my favorites: W3TC and Varnish Cache, e.g. Optimizing WordPress with Varnish and W3 Total Cache.
Another service that's critical is a content delivery network. Earlier I wrote about Accelerate Your Content Delivery With KeyCDN for Envato Tuts+ and then decided to switch to them.
Regularly reducing the dimensions and file size of images across WordPress is time-consuming yet critical.
I regularly use Acorn as a lightweight tool to quickly scale down images for the web. I laughed when someone tweeted recently that they'd just opened Photoshop and would be available for phone calls for awhile while it loaded—Acorn is small and fast. That Adobe subscription model is so slow to load—sorry, subscribers.
There are also automated image optimization plugins like WP-Smush. I recently began experimenting with KeyCDN's new Optimus. Also, here's WPMU's summary of the 10 Best Image Optimization Plugins to Speed Up Your WordPress Site.
Increasingly, I also access images on my post externally from Flickr. For example, when my post about Seattle's Amazon-driven neighborhood growth went viral on Slashdot, there were no performance issues or bandwidth costs for all the photos, because Flickr handled it.
You can read Google PageSpeed's Image optimization Guide, but I've increasingly found that Google help is overly research oriented (which is nice to have as a resource) but not very useful for resolving issues on your own. There may be one too many PhDs there and one too few actual users.
While I've always had W3TC and Varnish, adding KeyCDN and Optimus increased my PageSpeed to Mobile 72 and Desktop 82, a good improvement from 65 and 64:
Interestingly, Google's image caching complaints seem as if they can go on indefinitely, no matter what you improve. For this tutorial, I experimented with optimizing some of the identified remaining offenders to see what would happen. The result was interesting, and I'll tell you more about it shortly.
If you've done all the major basics above, improving your PageSpeed with WordPress turns out to require significant effort and can be quite time-consuming.
A static site usually has one file with CSS and JS includes that can be easily minified and combined. WordPress is a lot more complex.
So much is created dynamically through WordPress's—ahem—less than perfect architecture. It can take time to find where files are being created, whether they are in the themes or plugins, and how to address these issues. It turns out that when you have seven plugins including JavaScript files and you want to minimize and combine them into one include while allowing regular plugin upgrades, it's quite a challenge.
Updating my W3TC HTML minify settings quickly resolved PageSpeed's complaint about that.
For CSS, I had to individually add the files PageSpeed alerted me about to W3TC's CSS File Management. W3TC then began minifying my CSS and combining the named files into a single file to include.
This resolved PageSpeed's CSS minification requirement.
It also reduced the number of CSS files being reported for render blocking from seven to four theme-related files (listed first under Optimize CSS Delivery):
The three remaining files were from plugin directories outside of my theme (which we'll explore later):
I hope this gives you a sense of the rabbit's hole that WordPress PageSpeed optimization quickly becomes.
While minifying and merging CSS is generally pretty easy, JavaScript tends to fail a lot when you try to do this, creating major, site-breaking bugs.
Interestingly, PageSpeed now offers complete zipped downloads of its compressed versions of your files which it doesn't like.
It listed ten of my JS files that it wanted me to fix:
For reference, here are more of Google PageSpeed's minimization resources for HTML, CSS and JS. I also made use of Refresh SF, which provides easy web access to various compression tools.
Compressing and combining JavaScript can definitely create bugs, so I had to take things step by step. Using W3TC's JS File Management, I minified and combined the seven JS files within the Construct theme:
This didn't allow me to address my plugins' JS files or problems I was seeing with a mysterious unfindable externally hosted base.js file. Let's move on to Render Blocking problems and then return to JS minification after.
If you have a large variety of files that need to be loaded to style (CSS) and activate (JS) the functionality of your web page, most browsers will slow down after four resources are requested in parallel.
Here's an example of the CSS render blocking complaint in PageSpeed:
While W3TC had combined many of them into its include.c46b63.css, the next three above were from my plugins.
Blogger Justin Tadlock offered some guidance explaining how to ask WordPress not to load the CSS files that my plugins had enqueued for loading. The answer is to deregister them and then load a combined file on your own.
Here's my Table of Contents plugin enqueuing its JS and CSS files:
/** * Register and load CSS and javascript files for frontend. */ function wp_enqueue_scripts() { $js_vars = array(); // register our CSS and scripts wp_register_style( 'toc-screen', $this->path . '/screen.min.css', array(), TOC_VERSION ); wp_register_script( 'toc-front', $this->path . '/front.min.js', array('jquery'), TOC_VERSION, true ); // enqueue them! if ( !$this->options['exclude_css'] ) wp_enqueue_style("toc-screen"); if ( $this->options['smooth_scroll'] ) $js_vars['smooth_scroll'] = true; wp_enqueue_script( 'toc-front' );
Following Tadlock's suggestion, I deregistered my plugin includes in my theme's functions.php, first the CSS—you have to find the references used by the plugin developer:
add_action( 'wp_print_styles', 'my_deregister_styles', 100 ); function my_deregister_styles() { wp_deregister_style( 'toc-screen' ); wp_deregister_style( 'blogsynthesis_jss_css' ); wp_deregister_style( 'edd-styles' ); }
I manually created a combined CSS files with those three plugin stylesheets. Then, I asked W3TC to minify and combine that file into its own mega-stylesheet:
There is a major issue here in that when I update my plugins, I may need to update this combined CSS file and its accompanying JS files.
Here's a blog post with some other approaches you can use for these challenges.
Using Tadlock's approach, here's what the PageSpeed render blocking looked like afterwards:
I followed the same steps for JS files, just a bit more carefully. Gradually, my PageSpeed's JS complaint for my site became fairly minor:
However, as you can see below, it was also complaining about browser caching issues with JS files I couldn't find links to in my codebase such as ad_status.js from Doubleclick.
Removing a Legacy YouTube Player Embed
Eventually, I figured out that both the JS minification issue and this caching issue were related to my use of an external YouTube video player.
While I was curious to try a small fix suggested here to prevent video from loading without user action, I decided to just remove the video from my home page slideshow.
It's likely that the way my Construct theme embedded YouTube files was a legacy solution. YouTube's HTML5 support may work a lot better now. Still, it's kind of funny how a Google service impacts performance scoring of another Google service.
Removing the one feature on my home page that embedded a YouTube video solved a few problems:
Since I don't want you to miss out on seeing my better half before I was corrupted by WordPress, I'll include the video here. I used to be a nice guy.
Here's what was happening:
Once the earlier JS changes were made and the video removed, the JavaScript minification problem resolved for my PageSpeed master:
The browser caching error with Doubleclick shown below disappeared too.
Now, I actually only needed to cache gpt.js and ga.js, two more externally hosted Google services:
This turned out to be quite a big obstacle and required a lot of complexity to fully resolve these issues. The best solution is to locally host a copy of Google's scripts for Analytics and DFP and use cron scripts to regularly update them on your server. Alice began to get bored with me—hope you're still following along.
I looked at other themes I use with the Google Analytics Plugin (Construct has settings for Analytics) and they didn't address this either.
So, I made local copies of the scripts for Google Analytics and Google DFP, and shortly after, my browser caching was resolved in PageSpeed:
Here's more information from Google on Browser Caching, again a very deep technical resource without much guidance for WordPress administrators.
Google could provide common groupings of its popular JavaScript files minified and combined to better support publishers' PageSpeed. It would help too if they weren't loading their files individually and obscurely in scripts.
Let's briefly return to PageSpeed image size complaints before wrapping up.
Google PageSpeed's image suggestions can actually weaken the usability of your site. Here's one example, a featured image I hosted on my home page.
For my posts to appear in Facebook with a thumbnail image, the social network requires minimum dimensions of 200 pixels on its shortest side. My version is 281 x 200 (shown here slightly adjusted for Tuts+ requirements):
And, here's the version provided by PageSpeed in its zipped download:
You can see that the quality is even worse, but more importantly PageSpeed wants me to shrink the image to a dimension that Facebook wouldn't accept to show in its posts.
Ultimately, I chose to leave my site with a handful of PageSpeed image optimization complaints, lowering my scores.
After all of this work, where did my site end up?
The final PageSpeed scores included Mobile 70, showing some of the remaining complaints below:
Here are the image optimizations remaining:
And here is a summary of all the passed rules:
Also, here are the final UX scores. Most sites don't have big problems with these, so I didn't address them today:
The final Desktop score was 86, not bad:
JavaScript is finicky. I was never able to successfully minify and combine those last two files into the first. Even leaving them uncompressed never worked. Working with themes and plugins is hard. It would have required several days of dedicated work to resolve this.
Here are its image file size complaints:
Ultimately, optimizing my PageSpeed took a lot of time and effort and left my site vulnerable to future plugin and Google script updates. A lot of this work is quite confounding, detail-oriented and time-consuming. It's also a bit crazy-making and mind-numbing. Thanks Google.
PageSpeed isn't everything. Content matters too. Here are a few well-known sites and their PageSpeed. The results will surprise you.
Daring Fireball (DF) is one of the fastest content-focused blogs. It promotes advertisers in a minimal way. The pages run light and fast. Gruber's CMS is a customized version of Movable Type. The scores are just a tad better than my site. DF also generates a ton of revenue with minimal advertising.
Obviously a major news organization, they have terrible PageSpeed scores:
Astoundingly, our local rag with its awful advertisement and subscription bounce model is much worse:
A popular e-commerce site, B&H Photo, has a terrible mobile score and a desktop score just below mine:
You might have heard of this company in my recent essay How to Make WordPress Sites Different by Geography—they sell a lot of stuff online. My PageSpeed scores are significantly higher than theirs:
In the future, I'll be looking at a few more enhancements to improve my site's PageSpeed:
If I don't migrate themes shortly, I'll need to go implement that cron script to synchronize my self-hosted Google scripts for Analytics and DFP and figure out how to monitor plugin updates for JS and CSS changes. I might have to revert these specific PageSpeed gains, honestly.
If you have questions, please post them below. Or, you can contact me on Twitter @reifman. Please check out my Envato Tuts+ instructor page to see other tutorials I've written, such as my startup series (Building Your Startup With PHP).
Create Modern Vue Apps Using Create-Vue and Vite
/Pros and Cons of Using WordPress
/How to Fix the “There Has Been a Critical Error in Your Website” Error in WordPress
/How To Fix The “There Has Been A Critical Error in Your Website” Error in WordPress
/How to Create a Privacy Policy Page in WordPress
/How Long Does It Take to Learn JavaScript?
/The Best Way to Deep Copy an Object in JavaScript
/Adding and Removing Elements From Arrays in JavaScript
/Create a JavaScript AJAX Post Request: With and Without jQuery
/5 Real-Life Uses for the JavaScript reduce() Method
/How to Enable or Disable a Button With JavaScript: jQuery vs. Vanilla
/How to Enable or Disable a Button With JavaScript: jQuery vs Vanilla
/Confirm Yes or No With JavaScript
/How to Change the URL in JavaScript: Redirecting
/15+ Best WordPress Twitter Widgets
/27 Best Tab and Accordion Widget Plugins for WordPress (Free & Premium)
/21 Best Tab and Accordion Widget Plugins for WordPress (Free & Premium)
/30 HTML Best Practices for Beginners
/31 Best WordPress Calendar Plugins and Widgets (With 5 Free Plugins)
/25 Ridiculously Impressive HTML5 Canvas Experiments
/How to Implement Email Verification for New Members
/How to Create a Simple Web-Based Chat Application
/30 Popular WordPress User Interface Elements
/Top 18 Best Practices for Writing Super Readable Code
/Best Affiliate WooCommerce Plugins Compared
/18 Best WordPress Star Rating Plugins
/10+ Best WordPress Twitter Widgets
/20+ Best WordPress Booking and Reservation Plugins
/Working With Tables in React: Part Two
/Best CSS Animations and Effects on CodeCanyon
/30 CSS Best Practices for Beginners
/How to Create a Custom WordPress Plugin From Scratch
/10 Best Responsive HTML5 Sliders for Images and Text… and 3 Free Options
/16 Best Tab and Accordion Widget Plugins for WordPress
/18 Best WordPress Membership Plugins and 5 Free Plugins
/25 Best WooCommerce Plugins for Products, Pricing, Payments and More
/10 Best WordPress Twitter Widgets
1 /12 Best Contact Form PHP Scripts for 2020
/20 Popular WordPress User Interface Elements
/10 Best WordPress Star Rating Plugins
/12 Best CSS Animations on CodeCanyon
/12 Best WordPress Booking and Reservation Plugins
/12 Elegant CSS Pricing Tables for Your Latest Web Project
/24 Best WordPress Form Plugins for 2020
/14 Best PHP Event Calendar and Booking Scripts
/Create a Blog for Each Category or Department in Your WooCommerce Store
/8 Best WordPress Booking and Reservation Plugins
/Best Exit Popups for WordPress Compared
/Best Exit Popups for WordPress Compared
/11 Best Tab & Accordion WordPress Widgets & Plugins
/12 Best Tab & Accordion WordPress Widgets & Plugins
1 /New Course: Practical React Fundamentals
/Preview Our New Course on Angular Material
/Build Your Own CAPTCHA and Contact Form in PHP
/Object-Oriented PHP With Classes and Objects
/Best Practices for ARIA Implementation
/Accessible Apps: Barriers to Access and Getting Started With Accessibility
/Dramatically Speed Up Your React Front-End App Using Lazy Loading
/15 Best Modern JavaScript Admin Templates for React, Angular, and Vue.js
/15 Best Modern JavaScript Admin Templates for React, Angular and Vue.js
/19 Best JavaScript Admin Templates for React, Angular, and Vue.js
/New Course: Build an App With JavaScript and the MEAN Stack
/Hands-on With ARIA: Accessibility Recipes for Web Apps
/10 Best WordPress Facebook Widgets
13 /Hands-on With ARIA: Accessibility for eCommerce
/New eBooks Available for Subscribers
/Hands-on With ARIA: Homepage Elements and Standard Navigation
/Site Accessibility: Getting Started With ARIA
/How Secure Are Your JavaScript Open-Source Dependencies?
/New Course: Secure Your WordPress Site With SSL
/Testing Components in React Using Jest and Enzyme
/Testing Components in React Using Jest: The Basics
/15 Best PHP Event Calendar and Booking Scripts
/Create Interactive Gradient Animations Using Granim.js
/How to Build Complex, Large-Scale Vue.js Apps With Vuex
1 /Examples of Dependency Injection in PHP With Symfony Components
/Set Up Routing in PHP Applications Using the Symfony Routing Component
1 /A Beginner’s Guide to Regular Expressions in JavaScript
/Introduction to Popmotion: Custom Animation Scrubber
/Introduction to Popmotion: Pointers and Physics
/New Course: Connect to a Database With Laravel’s Eloquent ORM
/How to Create a Custom Settings Panel in WooCommerce
/Building the DOM faster: speculative parsing, async, defer and preload
1 /20 Useful PHP Scripts Available on CodeCanyon
3 /How to Find and Fix Poor Page Load Times With Raygun
/Introduction to the Stimulus Framework
/Single-Page React Applications With the React-Router and React-Transition-Group Modules
12 Best Contact Form PHP Scripts
1 /Getting Started With the Mojs Animation Library: The ShapeSwirl and Stagger Modules
/Getting Started With the Mojs Animation Library: The Shape Module
/Getting Started With the Mojs Animation Library: The HTML Module
/Project Management Considerations for Your WordPress Project
/8 Things That Make Jest the Best React Testing Framework
/Creating an Image Editor Using CamanJS: Layers, Blend Modes, and Events
/New Short Course: Code a Front-End App With GraphQL and React
/Creating an Image Editor Using CamanJS: Applying Basic Filters
/Creating an Image Editor Using CamanJS: Creating Custom Filters and Blend Modes
/Modern Web Scraping With BeautifulSoup and Selenium
/Challenge: Create a To-Do List in React
1 /Deploy PHP Web Applications Using Laravel Forge
/Getting Started With the Mojs Animation Library: The Burst Module
/10 Things Men Can Do to Support Women in Tech
/A Gentle Introduction to Higher-Order Components in React: Best Practices
/Challenge: Build a React Component
/A Gentle Introduction to HOC in React: Learn by Example
/A Gentle Introduction to Higher-Order Components in React
/Creating Pretty Popup Messages Using SweetAlert2
/Creating Stylish and Responsive Progress Bars Using ProgressBar.js
/How to Make a Real-Time Sports Application Using Node.js
/Creating a Blogging App Using Angular & MongoDB: Delete Post
/Set Up an OAuth2 Server Using Passport in Laravel
/Creating a Blogging App Using Angular & MongoDB: Edit Post
/Creating a Blogging App Using Angular & MongoDB: Add Post
/Introduction to Mocking in Python
/Creating a Blogging App Using Angular & MongoDB: Show Post
/Creating a Blogging App Using Angular & MongoDB: Home
/Creating a Blogging App Using Angular & MongoDB: Login
/Creating Your First Angular App: Implement Routing
/Persisted WordPress Admin Notices: Part 4
/Creating Your First Angular App: Components, Part 2
/Persisted WordPress Admin Notices: Part 3
/Creating Your First Angular App: Components, Part 1
/How Laravel Broadcasting Works
/Persisted WordPress Admin Notices: Part 2
/Create Your First Angular App: Storing and Accessing Data
/Persisted WordPress Admin Notices: Part 1
/Error and Performance Monitoring for Web & Mobile Apps Using Raygun
/Using Luxon for Date and Time in JavaScript
7 /How to Create an Audio Oscillator With the Web Audio API
/How to Cache Using Redis in Django Applications
/20 Essential WordPress Utilities to Manage Your Site
/Beginner’s Guide to Angular 4: HTTP
/Rapid Web Deployment for Laravel With GitHub, Linode, and RunCloud.io
/Beginners Guide to Angular 4: Routing
/Beginner’s Guide to Angular 4: Services
/Beginner’s Guide to Angular 4: Components
/Creating a Drop-Down Menu for Mobile Pages
/Introduction to Forms in Angular 4: Writing Custom Form Validators
/10 Best WordPress Booking & Reservation Plugins
/Getting Started With Redux: Connecting Redux With React
/Getting Started With Redux: Learn by Example
/Getting Started With Redux: Why Redux?
/Understanding Recursion With JavaScript
/How to Auto Update WordPress Salts
/How to Download Files in Python
/Eloquent Mutators and Accessors in Laravel
1 /10 Best HTML5 Sliders for Images and Text
/Site Authentication in Node.js: User Signup
/Creating a Task Manager App Using Ionic: Part 2
/Creating a Task Manager App Using Ionic: Part 1
/Introduction to Forms in Angular 4: Reactive Forms
/Introduction to Forms in Angular 4: Template-Driven Forms
/24 Essential WordPress Utilities to Manage Your Site
/25 Essential WordPress Utilities to Manage Your Site
/Get Rid of Bugs Quickly Using BugReplay
1 /Manipulating HTML5 Canvas Using Konva: Part 1, Getting Started
/10 Must-See Easy Digital Downloads Extensions for Your WordPress Site
/22 Best WordPress Booking and Reservation Plugins
/Understanding ExpressJS Routing
/15 Best WordPress Star Rating Plugins
/Creating Your First Angular App: Basics
/Inheritance and Extending Objects With JavaScript
/Introduction to the CSS Grid Layout With Examples
1Performant Animations Using KUTE.js: Part 5, Easing Functions and Attributes
Performant Animations Using KUTE.js: Part 4, Animating Text
/Performant Animations Using KUTE.js: Part 3, Animating SVG
/New Course: Code a Quiz App With Vue.js
/Performant Animations Using KUTE.js: Part 2, Animating CSS Properties
Performant Animations Using KUTE.js: Part 1, Getting Started
/10 Best Responsive HTML5 Sliders for Images and Text (Plus 3 Free Options)
/Single-Page Applications With ngRoute and ngAnimate in AngularJS
/Deferring Tasks in Laravel Using Queues
/Site Authentication in Node.js: User Signup and Login
/Working With Tables in React, Part Two
/Working With Tables in React, Part One
/How to Set Up a Scalable, E-Commerce-Ready WordPress Site Using ClusterCS
/New Course on WordPress Conditional Tags
/TypeScript for Beginners, Part 5: Generics
/Building With Vue.js 2 and Firebase
6 /Best Unique Bootstrap JavaScript Plugins
/Essential JavaScript Libraries and Frameworks You Should Know About
/Vue.js Crash Course: Create a Simple Blog Using Vue.js
/Build a React App With a Laravel RESTful Back End: Part 1, Laravel 5.5 API
/API Authentication With Node.js
/Beginner’s Guide to Angular: Routing
/Beginners Guide to Angular: Routing
/Beginner’s Guide to Angular: Services
/Beginner’s Guide to Angular: Components
/How to Create a Custom Authentication Guard in Laravel
/Learn Computer Science With JavaScript: Part 3, Loops
/Build Web Applications Using Node.js
/Learn Computer Science With JavaScript: Part 4, Functions
/Learn Computer Science With JavaScript: Part 2, Conditionals
/Create Interactive Charts Using Plotly.js, Part 5: Pie and Gauge Charts
/Create Interactive Charts Using Plotly.js, Part 4: Bubble and Dot Charts
Create Interactive Charts Using Plotly.js, Part 3: Bar Charts
/Awesome JavaScript Libraries and Frameworks You Should Know About
/Create Interactive Charts Using Plotly.js, Part 2: Line Charts
/Bulk Import a CSV File Into MongoDB Using Mongoose With Node.js
/Build a To-Do API With Node, Express, and MongoDB
/Getting Started With End-to-End Testing in Angular Using Protractor
/TypeScript for Beginners, Part 4: Classes
/Object-Oriented Programming With JavaScript
/10 Best Affiliate WooCommerce Plugins Compared
/Stateful vs. Stateless Functional Components in React
/Make Your JavaScript Code Robust With Flow
/Build a To-Do API With Node and Restify
/Testing Components in Angular Using Jasmine: Part 2, Services
/Testing Components in Angular Using Jasmine: Part 1
/Creating a Blogging App Using React, Part 6: Tags
/React Crash Course for Beginners, Part 3
/React Crash Course for Beginners, Part 2
/React Crash Course for Beginners, Part 1
/Set Up a React Environment, Part 4
1 /Set Up a React Environment, Part 3
/New Course: Get Started With Phoenix
/Set Up a React Environment, Part 2
/Set Up a React Environment, Part 1
/Command Line Basics and Useful Tricks With the Terminal
/How to Create a Real-Time Feed Using Phoenix and React
/Build a React App With a Laravel Back End: Part 2, React
/Build a React App With a Laravel RESTful Back End: Part 1, Laravel 9 API
/Creating a Blogging App Using React, Part 5: Profile Page
/Pagination in CodeIgniter: The Complete Guide
/JavaScript-Based Animations Using Anime.js, Part 4: Callbacks, Easings, and SVG
/JavaScript-Based Animations Using Anime.js, Part 3: Values, Timeline, and Playback
/Learn to Code With JavaScript: Part 1, The Basics
/10 Elegant CSS Pricing Tables for Your Latest Web Project
/Getting Started With the Flux Architecture in React
/Getting Started With Matter.js: The Composites and Composite Modules
Getting Started With Matter.js: The Engine and World Modules
/10 More Popular HTML5 Projects for You to Use and Study
/Understand the Basics of Laravel Middleware
/Iterating Fast With Django & Heroku
/Creating a Blogging App Using React, Part 4: Update & Delete Posts
/Creating a jQuery Plugin for Long Shadow Design
/How to Register & Use Laravel Service Providers
2 /Unit Testing in React: Shallow vs. Static Testing
/Creating a Blogging App Using React, Part 3: Add & Display Post
/Creating a Blogging App Using React, Part 2: User Sign-Up
20 /Creating a Blogging App Using React, Part 1: User Sign-In
/Creating a Grocery List Manager Using Angular, Part 2: Managing Items
/9 Elegant CSS Pricing Tables for Your Latest Web Project
/Angular vs. React: 7 Key Features Compared
/Creating a Grocery List Manager Using Angular, Part 1: Add & Display Items
New eBooks Available for Subscribers in June 2017
/Create Interactive Charts Using Plotly.js, Part 1: Getting Started
/The 5 Best IDEs for WordPress Development (And Why)
/33 Popular WordPress User Interface Elements
/New Course: How to Hack Your Own App
/How to Install Yii on Windows or a Mac
/What Is a JavaScript Operator?
/How to Register and Use Laravel Service Providers
/
waly Good blog post. I absolutely love this…