Progressive Web Apps | Reliability, Speed, Engagement

What Is a Progressive Web Application? 

A hot topic among developers, PWA or Progressive Web Applications, introduced and promoted by Google, combine simple development and effective user engagement.

Additionally, such type of apps resolves one of the main issues customers face in today’s digital environment: an abundance of choice that makes the users jaded or even frustrated causing a so-cold paradox of choice.

Having thousands of mobile applications to benefit from, users reach a surprising conclusion: a number of apps a smartphone user download a month is increasingly tending to zero according to the research conducted by Statista. Thus, the fact that mobile apps are waning in popularity is undeniable: 

Statistics demonstrate that number of downloaded apps per month is decreasing
A number of app downloads per month in 2017, US. Source: Statista

These statistics scream the need to find a new & fresh solution that will disrupt the market, and progressive web apps may be the things we are searching for. 

Contents:


Characteristics

As a progressive web app is neither a technology nor a new framework, the notion of PWA got blurred, particularly for those who only make the first steps in developing such applications. The right direction to understand and build a PWA is in compliance with the following characteristics the apps must have:

FeatureCharacteristic
ProgressiveInteract with every user disregarding the environment taking the method of progressive improvement as a core ideology.
ResponsiveAutomatically resize depending on the device: users of desktop, tablet, smartphones, etc. All users should get a good-looking version of PWA.
Independent of internet connectionThe heart of the app, Service Worker, should allow working in offline mode while the internet access issues.
Native-likeCorrespond to the usual ways of user’s interaction and navigation.
Easy-to-update
Service Worker API should control the process of automatic updates.
SafeUse HTTPS to prevent any data manipulation.
DiscoverableCan be easily classified as an “app” by search engines based on W3C manifest and Service Worker operation.
EngagingMotivate users to get back app using push notifications and other similar technical features.
InstallableAllow adding an app directly to the home screen without opening the app store.
Easy-to-useShouldn’t be installed in common sense. Opening the URL is enough to become an app user.

Stack

HTML, JavaScript, and CSS allow developing a progressive web app
Technological stack to develop a PWA

To develop a PWA app, the technological stack of the company should include JavaScript, HTML, and CSS to combine the simplicity of the website usage with specific for the native apps operating system and technical opportunities. 

Technologies

PWA technologies include push notifications, JSON manifest, service worker, HTTPS

Progressive Web App Manifest is a JSON file with a pretentious name, whose main goal is providing meta information about the app including: 

  • name;
  • description;
  • icons;
  • start URL;
  • background color;
  • display;
  • theme color;
  • model of behavior after being “installed” on a user’s device. 

* Optional fields have been highlighted, however, PWA developers from Jellyfish.tech fill out each of the fields to give comprehensive information about an app, in this way helping the search engines to better understand what it’s dealing with.

JSON manifest for a progressive web app
Example of JSON web manifest for a progressive web app

Both options of writing the manifest ourselves and generating the one using GitHub or Google instruments are available. 

Service Worker is a JS file that acts as a proxy between the network and app running in the background, resolving the issue front-end developers have been fighting for years: this technology helps store the website information properly so that a user could obtain it offline. Called the game changers for web industry, service workers (as a modern API) are the key technology to turn your website into an app.  

Serving the website content for a user isn’t the only capacity of service workers, they can offer much more including: 

  • dealing with notifications;
  • synchronizing the background data;
  • handling calculations;
  • receiving updates; 
  • controlling user’s requests to provide custom responses from the cache. 
Web server, service worker, and web page interaction
Scheme of a web page, service worker, and web server interaction

As Service Workers are so powerful, they could only function in a secure environment that brings us to the next point. 

HTTPS keeps the level of progressive web app security high to allow the service worker to operate properly as opposed to HTTP that makes a service worker be susceptible to cyber-attacks. Moreover, in human terms, with HTTPS you implement on the website, your users will be sure their data is secure that, in turn, will increase their engagement.

App Shell can be considered as a skeleton common to all app pages, a virtual framework that will be filled with the content later. App shell contributes to enhancing the user experience, as it launches the static rendering page promptly while the dynamic information is downloaded from the web.  

Push Notifications are crucial for user re-engagement as they encourage users to make targeted actions. This technology is applied widely beyond PWA, being the reason you get the requests from websites to send you notifications. 

The working algorithm of push notifications is rather simple:

  1. A user is requested to subscribe. 
  2. Every session & device gets a unique identifier. 
  3. Service Worker manages the subscription.
  4. A unique identifier is used to post a message from an app.
  5. Service Worker is ready to receive any incoming messages.

Progressive Web Apps VS  Native Apps

The basic objective of any PWA is to give so universal and unobtrusive experience of interacting with an app that a user could not notice the difference between two app types.

But you and I both know that the difference does exist, the devil is in details, and the details are in the following table:

Type of appPlatformInstallationConnectionUpdates
Progressive web appThe website or website
that have the application features.
To install an app, a user should only visit a website and add it to the home screen. The app is accessible with any connection quality. Its interface and content are accessible offline thanks to caching. Instant and automatic update.
Native appThe app is developed and optimized for specific mobile platforms.Only a direct installation on a device is possible after going to an app store and waiting for an app to install. A part of the app functionality depends on connection. Certain apps work offline. Before the release, app and any updates should conform to app store criteria.

Google

As you can tell, the advanced technology that allows building PWA definitely has the potential to benefit from during launching or redesigning a website/ app for your business. All the more, supported by Google, progressive web apps are most likely to expand on the web:

If you’re building a web app today, you’re already on the path towards building a Progressive Web App

Google

Besides, the concept of a progressive web app complies with the Google mobile-first index that enables indexing & ranking the mobile version of a site i.e. the mobile users’ interest comes to the fore. 

This index requires performing numerous actions to optimize websites so that their content could be properly reflected on different devices. The income of mobile optimization depends on numerous factors: 

  • Pages load speed;
  • Code size;
  • Images & video size;
  • Pop-ups;
  • Compliance of website and mobile version content.

Frequently, a site couldn’t be optimized to the point where the criteria introduced by Google are met because of the inner features, while a progressive web app completely corresponds to them having the responsive design and high load speed as the main characteristics. PWA reduces the areas of responsibility thus concern that can’t help enhance the positive experience of both site user and owner. 

Business Value

The only way to remain viable for companies in today’s digital world is to improve themselves constantly searching for innovative solutions, one of which is PWA. The real businesses have contributed to the statistical study of conversion increase after PWA development:

Value of PWAs for your business
This is how progressive web apps may add value to your business

Progressive web applications seem to be the ones to help enhance customer experience by requiring minimal target audience effort during the interaction using the following features:

➡️Customer gets an automatic request to install an app after the second site visit.

➡️Quick installation and small app size contribute to the increase of downloads number, as many smartphone users refuse to install new apps exactly because of low download speed and too much storage space taken.

➡️Fits for all platforms so during the project development you won’t be concerned about investing in optimization for different devices and creating the right solutions for different platforms.

➡️Cuts development costs. PWA development requires less time & budget resources than native app development. Plus, as we’ve mentioned above, it shouldn’t be optimized manually, as it already fits the major platforms.

➡️Choosing a PWA, a customer chooses a lower competition for the business, as developing a mobile app, you automatically compete with thousands of apps in stores, while PWAs can be found in organic search as websites and shared on social media. This increases the chances to be noticed in multiple times.

➡️ SEO may become one of the ways to make your PWA stand out, as the usual instruments of search engine optimization may be applied to your app, increasing its traffic on the web. 

➡️Push notifications re-engage users giving the pretext to launch the app one more time. 

Our team has found only one thus significant flow: it is still not supported by certain browsers, for example, Safari. To be more specific, it does not support the web manifest, push notifications, nor background sync. However, platform limitations do not prevent brands from increasing customer engagement using PWAs.

Progressive Web Apps: Are You For or Against?

PWAs are the universal solution that may fit nearly all businesses in any industries depending on their strategy and ultimate objectives. Can’t decide whether choosing this app type is a win-win solution for your business? Jellyfish.tech may share the research-based expert opinion & advice on aligning a PWA with your corporate strategy. Even if a PWA runs counter to your company’s current interests, we will offer another digital option to grow your business.

Python Performance Optimization | Actionable Guide

Why Optimize Python Code?

As the needs of digital companies are continuously growing, becoming more and more complicated, especially when building a large scale product, upgrading the expertise and searching for fresh solutions to solve customer pains are a must for software development companies. 

Python is one of the most popular and progressive backend programming languages, thus, many tend to use it in the creation of large-scale high load applications. 

However, after being inspired by the new ground that will probably be broken using Python to build a backend, many companies face the reality where the greatest Python drawback— loss of performance—is revealed. This Python flaw may ruin the impression of even the clearest code.

All software developers are always interested in the maximum speed with minimal code size 

Contents:

How to Optimize Python Performance?

Even with the comparatively low program performance, Python is still one of the most attractive programming languages for thousands of developers across the globe due to its advantages. 

That’s why there is little practical value in preferring another programming language over Python just because of its performance flaws. Any team of Python developers (provided that they are professional enough) is definitely able to give you several possible solutions to this problem on the spot. As long as this issue is still relevant, the Jellyfish.tech team doesn’t want to stand aside offering you the options to improve the Python performance.

Usually, we offer several solutions to customers discussing the pros and cons of each for the specific application. 

Methods of Optimization 

In general, all the existing methods of Python optimization are based on two approaches: 

  • Another environment for the programming language. 
  • Refactoring of the existing Python code in order to increase its performance.

Each of the ways to improve code performance we’re about to recommend is based on one of the above-mentioned approaches:

Cython

Cython is a Python superset, a special version of the language that compiles to C and interfaces with C/C++ code. This is one of the ways to write C extensions for Python (to implement the blocks of code that requires the particular performance). Besides, it can be used separately from Python. The flip side of this method is a non-automatic code database migration, thus, technically, not exactly Python is used. 

Cython is common enough to be used in numerous libraries. For instance, some algorithms in scikit-learn are developed using Cython to increase the performance. 

PyPy

Among all the candidates contributing to the increase of a Python performance, PyPy is one of the most prominent. For instance, Quora uses it in production. PyPy probably has all the chances to become a good default environment due to the excellent code compatibility. 

PyPy uses the JIT compiler as well as a Google Chrome engine to support JavaScript that is exactly the reason for performance improvement. However, we have some bad news for all lovers to stay ahead of the others using the latest possibilities the Python language offers, as PyPy provides support of the new language versions with a considerable delay.

Pyston

The project sponsored by Dropbox uses LLVM (Low Level Virtual Machine) infrastructure for a compiler that uses JIT as well. If to compare with PyPy, Pyston is still on the first stage of development with the actual version 0.5.1 that doesn’t support all the possibilities of the programming language.

Nuitka

Instead of increasing the performance of the Python interpreter and bytecode compiler, some web developers suggested that Python code to be translated into the other languages that haven’t any performance problem. 

The same has done the team of Nuitka: its project compiles the Python applications to the C++ code. The realization is largely based on the existing binary files of the Python environment that imposes certain limitations on project migration but you shouldn’t underestimate a performance increase that is ensured by such a translation. In the future, the team is about to translate Python directly into C (this plan is actually for the far future) that will increase the performance drastically.

Numba

Numba combines two above-mentioned approaches. It takes the idea of accelerating only certain programming language blocks (for example, math calculations connected to the central processor) from Cython. Numba does it with the help of LLVM as well as other projects, discussed in the post. The functions compiled with the help of Numba can be marked by the specific decorators so that the tool will be working on improving their performance together with NumPy. However, Numba doesn’t use JIT; it means that the compilation takes the additional time.

A few other ways to speed up Python:

Python C Extensions 

The Python creators made a great present to those developers who work with this programming language, namely Python/C API that provides the possibility of relatively transparent integration of C code into Python applications. There are only two drawbacks of this solution:

  • The barrier to entry of C and Python/C API is higher than in bare Python that makes it impossible for developers who aren’t familiar with C to use this method. 
  • One of the Python great advantages is the speed of development. Using C to create the part of the application slows this process down.

SciPy

SciPy is the package of applied mathematical procedures based on the Numpy Python extension. A Python session turns into the real environment of data processing and sophisticated systems prototyping. 

The module scipy.optimize allows the realization of the following procedures:

  • Conditional and unconditional minimization of scalar functions of several variables (minim) using the different algorithms (Nelder–Mead method, BFGS, COBYLA, SLSQP, and Newton’s method).
  • Global optimization (for example, basinhopping, diff_evolution).
  • Minimization of scalar functions by one variable (minimum_scalar) and root search (root_scalar).
  • Multidimensional solvers of a system of equations (root) using the different algorithms (Powell’s method, Levenberg–Marquardt algorithm). 

Basic Optimization Principles

Considering a code optimization makes sense only after the program has produced the valid output. 

If you find out your software is slow, profiling is a way to identify the parts to optimize. 

The first thing to do is to determine the bottlenecks. Related blocks of code such as cycles and subprograms.

Then, decide on the approach to code optimization. The only way to choose is to proceed from the technical characteristics of your project and the technical capacities of your team. As a rule, a software architect or back-end team lead is responsible for taking this decision together with a customer.

Looking for a solution to improve Python performance? Ask an experienced software architect:




Considering the relevance of Python optimization, bear in mind the key success factors:

  1. Simplicity. The code should be clean, modular, and easy-to-read. Each module should be naturally integrated into the program with the possibility to edit or delete separate parts without interfering with the other parts of a program. 
  2. Performance. You have to get the performance growth. As a rule, a successfully optimized program increases the speed by 20-30 percent compared to the initial version. 
  3. Time. Optimization and further debugging shouldn’t take much time. A period not exceeding 10-15 percent of all time spent on product development. Otherwise, it would not be cost-effective.