This is a tech post by Arnaud Breton, full-stack developer here at mention with a specific focus on the front-end side and user experience. Before joining mention, Arnaud was co-founder and CTO of UniShared and VideoNot.es, part of the Imagine K-12 2013 Winter batch.
Over the last few years, we’ve seen tremendous growth in an entirely new generation of web applications. These apps have become much richer, leading to a huge increase in complexity on the front-end side.
In order to succeed in these new challenges of complexity, developers have created a lot of tools to streamline the overall development process. From test frameworks to profiling tools, we now have mature and useful tools to bring the best experience to our users.
At Mention, we love the tools which help us to provide the best quality software while at the same time making our life easier. In this blogpost, we’ll present the 5 best tools and frameworks that we use every day to address these challenges.
The best tool we have in our hands today. Since its birth, Google Chrome has invested a lot in its developer tools and is still improving them continuously. Each release (every 6 weeks or so) comes with its own brand new dev tool features.
The DOM/CSS editor is an extremely powerful tool, letting you provide realtime feedback to your team, iterating fast on the UI/UX of a new feature.
The official website and the Google Developers Youtube channel both are goldmines of information. For example, the section about command-line API contains really useful commands.
You can for example copy anything to your clipboard from the console by calling the special `copy` function and pass the thing to be copied (object, function return, etc.)
A lot of great tutorials are also available on HTML5 Rocks.
On top of all this, the network tools let you understand what is really going on under the hood and optimize your loading flows, all while the timeline gives you a deeper view of what the browser does.
If you’re curious enough (like us) you can learn a lot about how a browser (and indirectly, the web) is working, letting you take back full control of your application’s lifecycle.
I personally think that if they continue to follow this path, they will definitely become the ultimate IDE (or Integrated Developer Environment) for the web[a] offering web developers a powerful development space bundled directly into the browser.
Grunt’s scope goes beyond simply automating front-end related tasks. We use it, for example, to continuously test in PHP while we develop:
We also used it to create a workaround for some performance issues we found in the Vagrant rsync-auto watcher, which were recently introduced. Grunt offers a wide variety of plugins, ranging from watching files to linting, compiling, and minifying your code. Its syntax is consistent and easy to learn and a lot of examples are available around the Web.
How many times on average do you hit the refresh key on your keyboard every day? A lot, right? LiveReload is a simple Web protocol that triggers events to the clients whenever files are modified. Clients can handle this event in their own way, even if the most common use case is when a file is modified (or is a compiled version).
The client/server come in various implementations. We personally use the one bundled in the Grunt watcher plugin, as well as this simple Chrome extension as a client (which has the advantage of being switchable, because you don’t always want live reload, after all).
You can see it in action here:
Talking about Chrome extensions, the Chrome store is full of powerful ones. Go and explore, and you’re sure to discover things that will make your life far more easier. Here are some of our favorite ones:
- WhatFont, which lets you discover the rendered font of any element on any website (useful when looking for the perfect typography you saw on another site, or for debugging your font-face styles).
- Page ruler: another useful one, mainly because just like any front-end developer, you’re obsessed by pixel perfection, right?
- Proxy SwitchySharp can also be of great help when it comes to debugging localized information (default currency, phone numbers, etc).
- And of course, our very own Chrome app to get the most of mention!
Does testing make you queasy? It’s often the case, mainly because it requires a ton of bootstrapping and if you don’t design things to be testable from the beginning, things can become very hard.Fortunately, we now have great testing frameworks, as powerful as what you may have already used with other languages.
For instance, please consider this really simple example:
Here’s now two different specs, one written with Jasmine, the other with Mocha/Chai:
The chosen syntax for Jasmine is the default one, described in the official documentation. This unofficial extension enhances Jasmine async feature to provide the same thing that Mocha. Take few minutes to understand this sample and observe how clearer is the Mocha syntax. Unlike Jasmine, Mocha offers only the behavior testing structure (more about BDD), and not the assertion/mock framework. But there’s nothing bad here, since it perfectly integrates with dedicated frameworks like Chai and Sinon.
Sinon comes with a full-set of functions to easily mock objects and stub methods. For example, here’s how you can assess that a method has been called using the Sinon’s spy type (taken from the excellent documentation):
Chai is remarkable in the way that it lets you make assertions in a very similar way to natural language. For instance, please consider the following example, leveraging the should assertion syntax:
Very clear, right? No reason not to go testing your code now!
Karma lets you execute your tests from your workstation (in continuous mode) to the production CI. It can launch multiple browsers (Chrome, Firefox, IE (!), PhantomJS, etc.) and run your tests against them, giving you maximum confidence in your code.
While developing, it’s a real pleasure to write code on your first monitor and get the results, in real-time, on the second, all running against multiple browsers.
You’re now good to go to become a front-end ninja, ready to beat all the adversity that you’ll meet during your journey.
All the samples are available on GitHub Gist. Of course, feel free to play with it!
And you, what are your favourite tools when it comes to Front-end development?
PS: If you’re wondering what Mention is, here is a short video: