The question comes up every now and then on what’s the best target to develop for: desktop or web. The answer is sometimes pretty straightforward but, in reality, the answer should be “it depends.” You see, each target has some very good strengths and also some bad weaknesses that you need to evaluate before you start coding. Let’s go over some of those issues. Let’s start with desktop apps.
Xojo has been making desktop apps for it’s entire history. Thus it is very stable and mature and there are a lot more 3rd party libraries and plugins available. You get most, if not all, of the goodies that come along with the desktop environment and this can mean your desktop apps can have most of the buzzers and bells that modern users demand.
With desktop apps, if you need 10 more copies, it’s as simple as installing them on new machines. These days there’s not a lot of issues deploying to Mac OS X and Windows and most versions of Linux, but still, you need to test on all supported platforms.
The major downside to desktop apps is deployment. Each user has a copy of the software and depending on your needs/requirements you might need to ensure that everyone be on the same version. Example: You’ve created a desktop app for a veterinary clinic that handles everything from pet checkin to billing. All of them connect to the same database so when you introduce a schema change in the database you need all the clients to use the newest version. For a small organization this might not be so bad but scale that up to a corporation with several hundred copies of your software. A good organization might have a good IT department and can deploy your software to everyone at once, but my experience says that most organizations don’t handle this well. So your software has to be programmed to be cognizant of database versions and check at startup and complain if it’s not what it’s expecting. From experience it’s a pain to deal with.
Desktop apps that are part of an n-tier system also need to be programmed differently. You can program each client with all the logic it needs, but then you have to worry about record locking issues (i.e. who wins if two users are editing the same record at the same time). You also have deployment issues, again, since you’re back to the issue of updating every client every time there’s a little change in logic. The better solution is to have a middleware application that handles the business logic and is the go-between between the client apps and the server. The middleware app does all of the business logic and handles the transactions between the database and the client apps. It’s a fair bit of work and is not what I would consider a simple undertaking. But at least you generally only have to update the middleware app most of the time and the clients can stay the same.
Web apps, on the other hand, have several advantages over desktop apps. First, they are n-tier by design. Each client has its own set of logic via Xojo WebSessions even though there is only one application running. The user runs in a browser and everything is processed on the server. So when you need to update your web app you shutdown the old one, replace the executable and the next time someone hits the URL the newer version is there and running. Having only one instance to update is really nice (and quick). Web apps eliminate many deployment challenges.
Web apps aren’t perfect though. Since they are generally exposed to more random user interaction via the web you spend way more time dealing with security and making sure nefarious users don’t get into your system or abuse it. All of your database operations should use PreparedStatements to make sure SQL injection attacks cannot happen.
Web apps run in a browser. That’s both good and bad. Users can access your app as long as they have internet access. In some areas this is no big deal and for others it’s a huge deal. Browsers also have a lot of built-in security to keep bad things from happening on your computer. This security also limits what your browser can do in terms of file handling local. Xojo does not currently support drag and drop operations with the browser.
Xojo web apps are also not as stable and mature as the desktop side simply because it’s younger. That’s not the same as unsafe but it does mean there are not as many 3rd party options for Xojo web apps. Some controls, in particular the listbox, are vastly inferior to their desktop counterparts in terms of capabilities and may not be good enough for your needs. Web Containers go a long way towards solving this issue but it’s not ideal.
Not all web browsers are created equal. Some perform better than others and all of them have gone through tremendous growth in the past ten years as the internet has become ubiquitous. This means there are a lot of different browsers, and versions of those browsers, being used by the general public. Testing the various browser type and version combinations is critical and despite all the efforts of Xojo to get it all right, the speed of new browser releases does mean issues pop up now and then. Mobile browsers have their own set of issues that you might need to take into account as well.
Desktop apps have a huge advantage in that they don’t have to convert text to UI like web apps do. For example loading 1,000 rows in a desktop listbox, while slow is blazingly fast compared to doing the same thing in a web app. 1,000 row list boxes in web apps are SLOW simply because the server has to create all that html data, send it through the internet to the browser, and then the browser has to reassemble it for the user to see. To get around this most websites do data paging where they only show you 25 to 50 records at time. Again, not hard to do but one more thing to develop. Also keep in mind that mobile browsers try really hard to minimize data connections over cell connections so what seems fast on your desktop might be incredibly slow on a mobile phone.
Perhaps the biggest issue with web apps (not just those made with Xojo) is scaling. Your app will react differently when accessed by 1000 simultaneous users than when it has 10. The way around this is to do load sharing and balancing using NgInx and works well on Apache web servers. Finding a good web server to host your web app can be challenging too. Until Xojo releases their 64 bit support for web apps it will be increasingly difficult to find and install 32 bit compatibility libraries that work with Xojo web apps.
As you can see, there’s is no right answer. Both desktop apps and web apps have their place in the world since they each have strengths and weaknesses. Before you start development work you need to think through the implications of doing each.
Happy coding! Was there anything I forgot to mention in the debate of desktop vs web apps?