Cross-platform App development


Often, developers who claim that cross-platform development is as good as native and suitable for most tasks, claim that products have comparable or similar performance to native languages. Is it so in your opinion?

The opinion, probably, will be not only mine, but also the majority of other developers. Comparable or similar performance will certainly not be obtained using some of the very first tools that wrap web pages, trying to make this application, for example, Ionic. Modern tools, on the contrary, use native components internally, which certainly improves performance. But, it is worth loading an application based on this technology with some kind of complex logic, which in the native case would require additional research in terms of optimizing complex and large calculations, we will immediately get a negative result. In any case, even on the most stable and close to native cross-platform tools, it will be visually noticeable that this is not a native application. Perhaps to a person who is not familiar with this, it may seem that there is no difference, but after years of experience you see it with the naked eye.

Is it possible to compare the performance of native products with the performance of cross-platform ones?

Personally, I would not, because. decided everything for myself. But it is always possible and necessary to compare, and this is where the truth lies. A tool like Component Kit, the progenitor of React Native, once showed us what high performance is like compared to regular native tools. But that was just a Facebook case that spawned both of these technologies. Most of the others are still unoptimized, and it’s hard to say how they will behave in the case of your application.

If cross-platform frameworks have lower performance than native languages, how noticeable will this be to the user?

As I said above, for the average user it will be rather imperceptible. But this is only if the developer was extremely careful, knew what he was doing, did it not for the first time, and was familiar with most of the problems of the technology that he was using.

But in the general mass, it must be admitted, given the low threshold for entering the technology for developers, such applications will be very visually different due to the lack of smooth animations, visual components that are not native to the platform, and also have poor layout on some rare devices.

How is work built from the computing subsystem of the device in a cross-platform environment? Do you need native products for this, how big is their presence?

Most of the basic needs of a developer are already covered by the capabilities of cross-platform tools. But everything, as they say, depends on the context. If we are talking about some complex animations, working with video, camera processing, then it is better to turn to the native part of the environment.

Do you need elements of native development in all cases of working with the computing subsystem of a smartphone? If not, please provide examples where such interaction is provided by framework libraries (for example, React Native or Flutter)

Usually, these frameworks do a good job of covering the needs of a developer in terms of screen layout, basic networking, in general, everything that is needed for an ordinary application. On the other hand, navigation patterns are well implemented in them, which is neglected by many inexperienced native developers or was neglected earlier, even at the very dawn of mobile development, now the entry threshold has become higher and it will be difficult for a person without these skills to survive in the market.

Is it true that in all cases, with qualified development, a native application will be more compact? Are there ways to reduce the volume to comparable values ​​when using cross-platform methods?

Of course, if a cross-platform tool is added directly to the binary code of the application, this greatly increases the weight of the application, because in such technologies, they usually try to cover almost all the necessary tools for the developer. If these technologies converted your work directly into the final native binary code, then the result would be better, but as you know, neither modern Flutter nor React Native do this. It is understandable: this is even more difficult work than they have already done. Because It’s one thing to convert them using top-level scripting languages ​​using native components while the application is running, it’s another thing to generate a huge amount of code before compiling. On the contrary, with native development, the developer can choose third-party libraries that are not quite suitable for him, or use them where he could get by with a couple of dozen lines of his code, thereby increasing the size of the application by their volume, and they can be extremely large, t .e. in this case it is redundant. As for reducing the volume, here, in fact, all the same approaches as in native development: get rid of unused resources, code, compile the application for the desired architecture, where possible, get rid of debug symbols, and so on.

Are there well-implemented ways to interact with low-level device functions in cross-platform frameworks that do not require the use of native development elements? For example, encryption functions for fintech development or work with smartphone hardware?

Given the fact that cross-platform applications are not the last place on the market, these tools are certainly widely represented on the network. I would especially like to mention React Native and similar tools that use JavaScript internally. Because it is originally the native language for web development, and web development has always kept pace with the development of cryptographic products. Here you will find a great variety of third-party libraries with a stable implementation of certain algorithms for a long time.

As for the smartphone hardware, alas, the reality is that year after year platform vendors introduce additional features, old functions remain unsupported, some security restrictions are constantly introduced, and to be sure that a cross-platform product will allow you don’t need to be quick to support new changes that may have been made for years by a huge staff of Apple or Google developers.

Have you experienced the inaccessibility of new mobile device features on frameworks, when they were available for native development tools?

Personally, I don’t. Because has always been a strict supporter of native development. But if a cross-platform framework allows you to write native code and use it, then this will be your way out for a short time until the framework itself supports it.

How much, in your opinion, is the labor costs higher when working with native languages, compared to cross-platform development? How much time can be won?

I will never stop saying that you can gain time using cross-platform tools only in a short distance.