App lags, website doesn't - air

I'm building a small app with Adobe AIR using HTML and JavaScript. When I view the app as a regular website (no matter in which browser), it's all perfectly fine. But when I view it as an AIR app (with the adl command or in a proper package), all the effects, mostly jQuery, make the website lag.
I do not use any fancy effects, it's just about image sliders. Any ideas where this is coming from?
Thanks!
PS: I know it's not because my PC is too slow; I recently bought new hardware for 700 EUR (~980 $; ~620 GBP) :)

I had the same problem.
It turned out, you MUST NOT use box-shadow -webkit-box-shadow or text-shadow css properties in your air app. It works fine in other browsers? but dramatically slowes down air performance.
That worked for me.

I'm working on a JavaScript AIR app at the moment that is running jQuery without a problem on very low spec PC, and is actually impressing me with how fast it is (knock on wood!). Adobe improved JavaScript performance recently, so if you haven't got the latest runtime (currently 2.7) then definitely grab that.
As for the jQuery itself, make sure you are using the minified versions of the jQuery libraries, and only include the ones that you absolutely need. It's always a good idea to compress images as much as you can, as moving big images around will obviously take more processing power.
You could also take a look at this article about performance tuning AIR apps, although it is focussed on Flex and AS development.
http://www.adobe.com/devnet/air/articles/air_performance.html
Good luck!

Related

Titanium UI issues

I am beginning to look at options for cross-platform mobile development. In a couple of places I read that there are some problems with Titanium UI performance, here is a link to one of those (slide 12):
http://www.slideshare.net/bertouttier/crossplatform-tools-for-mobile-application-development
I then went to the Titanium site's App Showcase to download and test some apps to see if I noticed anything. I decided to start with the Khan Academy app since I know that they are pretty tech savvy (or assume so since their founder has 3 degrees from MIT including Comp Sci) and have some money (a few million from Google and Gates).
It only took me about 1 minute to get to a video with captions listed below the video and the first few words of the narration. I went down to the scrolling captions and tested how the gestures felt and couldn't believe that it was barely functional. Sometimes it goes in the wrong direction, sometimes it does nothing, and I cannot access the vertical scroll bar!
So the larger question I am trying to answer is potential not suitable for the Stack Overflow format...., which is: Is this one glitchy UI indicative of problems found in using Titanium in general?
More specific questions are: Why is the caption scrolling at the bottom of these videos so terrible? Is this an issue caused by Titanium? Have other people run into similiar problems with UI widgets in Titanium?
FYI - I am using an iPad 2.
If you are looking for the fastest possible UI performance, going "fully" native is probably the best overall option. Titanium offers you flexibility in that you are writing a single application with smaller changes, if necessary, across multiple platforms. It cuts your development time down significantly since you are able to share code across projects.
My understanding of the UI in Titanium is that they map to native controls on the target platform. So the performance you are seeing are native controls. The background logic of your application, the business rules, are controlled by JavaScript.
I downloaded (from iTunes) and played with the app and didn't see any issues with navigating their app. I am running it on an iPhone 4 with IOS 6. The animation flipping between between tables was responsive and the animations jumped in a predictable way. Perhaps you have a different OS version?
The Khan Academy appears to be a perfect example of an app that should take advantage of cross-platform development like Titanium. Though the app is relatively simple, it gets you access to what you need quickly and simply. This app could then be deployed on all the supported Titanium platforms, likely without any modifications at all.

Webkit Wrapper for Desktop Apps

I have a desktop app based on HTML/JS that needs WebKit to function at a reasonable speed. Normally, I would live with IE behaving badly, but its JS engine is just too slow.
I would normally go to Appcelerator for this, but it seems they have discontinued their desktop SDK and left it for the "community"...
This needs to function on Windows PCs, or I would just use Fluid (http://fluidapp.com)...
Is there a simple Webkit wrapper that I can use, or should I build one really quick in something like Qt. I haven't used Qt in a while, so I'd have to look at it again and make sure WebKit is implemented in it...
While it is somewhat node.js-oriented, AppJS may offer what you're looking for. If it doesn't already support other scripting languages, it might at least provide a good example to start from.
Update: in the time that's passed since my original answer, it seems node-webkit fills a similar role but has gathered and maintained more momentum than AppJS. It's a little more focused, in that it doesn't attempt to provide much additional "framework" on top of simply exposing the node.js API to the window's JS context.
There's also https://github.com/atom/atom-shell, which I just learned of and may be similar.
One other thing to note is that (presumably with either, but at least with node-webkit), you MUST be cautious of any XSS-like vulnerability in your app that an attacker could exploit to gain complete access to the user's native machine. So if you are simply needing to package an offline web app in a downloadable desktop distribution, you may wish to research more PhoneGap-like solutions (e.g. Mac OS X as PhoneGap platform) or a plain web view wrapper (like mentioned in the OP) that do not expose an entire OS-level native API — as node.js does — into the JavaScript environment.

About WAP websites

How to create a WAP website?
What software do I use?
Do I just need to use HTML coding or other type of language?
And after I created it, Can I view it on my own phone?
Do I need a server to let it run or I can just view it on my phone?
Can someone help please, its for my project.
Thanks alot.
What phones are you targeting? Any phone released in the last 3-5 years is able to view standard (X)HTML without issue - except for the fact that they mostly have very small screens.
Some phones do not support Javascript very well (but that is mostly changing, too) and most phones do not support Flash (yet - most newish phones except iPhone will probably support flash "soon", if not already).
The only other main difference is that most phones these days use a touch interface, rather than a traditional keyboard/mouse. That means you can't really do things like hover effects and so on.
But other than the smaller size, everything else is pretty minor.
I agree with the post above that unless you are targeting very old phones, there is probably very little point to working with WAP today - AFAIK the last official version was WAP 2.0 which was circa 2002.
WAP 2.0 used a streamlined version of XHTML. The best way to develop is to either navigate your phone to a standard HTTP server hosting your files - or download and use a simulator. I found the best practice was to develop the app until it worked on the simulator (which could often be directed to load local files) and then do final testing and tweaking with actual devices.

Building Cross Platform app - recommendation

I need to build a fairly simple app but it needs to work on both PC and Mac.
It also needs to be redistributable on a disc or usb drive as a standalone desktop app.
Initially I thought AIR would be perfect for this (it ticks all the API requirements), but the difficulty is making it distributable, as the app would require the AIR runtime to be installed to run.
I came across Shu Player as an option as it seems to be able to package the AIR runtime with the app and do a (silent?) install.
However this seems to break the T&C from Adobe (as outlined here) so I'm not sure about the legality.
Another option could be Zinc but I haven't tested it so I'm not sure how well it'll fit the bill.
What would you recommend or suggest I check out?
Any suggestion much appreciated
EDIT:
There's a few more discussions on mono usage (though no real conclusion):
Here and Here
EDIT2:
Titanium could also fit the bill maybe, will check it out.
Any more comments from anyone?
EDIT3 (one year on): It's actually been almost a year since I posted that question but it seems some people still come across it every now and then, and even contribute an answer, even a year later.
Thought I'd update the question a bit. I did not get around to try the tcl/tk option at the end, time constraint and the uncertainty of the compatibility to different os versions led me to discard that as an option.
I did try Titanium for a bit but though the first impressions were ok, they really are pushing the mobile platform more than anything, and imho, the desktop implementation suffers a bit from that lack of attention. There are also some report of problems with some visual studio runtime on some OSs (can't remember the details now though).. So discarded that too.
I ended up going with XULRunner. The two major appeals were:
Firefox seems to work out of the box on most OS version, so I took it as good faith that a XULRunner app would likely be compatible with most system. Saved me a lot of testing and it turned out that it did run really well on all platforms, there hasn't been a single report of not being able to start the app
It's Javascript baby! Language learning curve was minimal. The main thing to work out is what the additional xpcom interfaces are and how to query them.
On the down side:
I thought troubleshooting errors was a sometimes difficult task, the venkman debugger is kinda clunky, ended up using the console more than anything.
The sqlite interface is a great asset for a desktop app but I often struggled to find relevant error infos when something didn't work - maybe i was doing it wrong.
It took a little while to work out how to package the app as a standalone app for both PC and Mac. The final approach was to have a "shell" mac app and a shell pc app and a couple of "compile" script that would copy the shells and add the custom source code onto it in the correct location.
One last potential issue for some, due to the nature of xulrunner apps, your source code will be deployed with the app, you can use obfuscation if you want but that's something to keep in mind if you want to protect your intellectual property
All in all, great platform for a cross-platform app. I'd highly recommend it.
Tcl/Tk has one of the best packaging solutions out there. You can easily wrap a cross-platform application (implemented in a fully working virtual filesystem) with a platform-specific binary to get a single file executable for just about any modern desktop system. Search google for the terms starkit, starpack and tclkit. Such wrapped binaries are tiny in comparison to many executables these days.
Many deride Tk as being "old" or "immature" but it's one of the oldest, most stable toolkits out there. It uses native widgets when such widgets exist.
One significant drawback of Tcl/Tk, however, is that it lacks any sort of printing support. If your application needs to print you'll have to be a bit creative. There are platform-specific solutions, and the ability to generate postscript documents, and libraries to create pdfs, but it takes a little extra effort.
Java is probably your best bet, although not all Windows PCs will necessarily have Java (most should). JavaFX is new enough you can't count on it - you'll probably find a lot of machines running Java 1.5 or (shudder) 1.4. I believe recent Mac OS still ships with 1.5 (latest version may have changed to 1.6).
Consider JavaFX
It would run everywhere with a modern JRE ..!
AIR could be an option, but only if you don't mind distributing two different files (the offline runtime installer and your app), and expecting the user to run one and then the other. You do have to submit an online form at Adobe's site saying you agree to distribute the offline installer as-is, rather than digging out individual DLLs or whatever, before they give you the installer.
Unfortunately there's currently no way to get both an AIR app and the runtime to install from one file though. I'm not sure what the deal with Shu is, or whether it's doing anything that isn't kosher.
i would recommended zink. it has all the functionalities you require for desktop. however, the las time i used it it was a bit glitchy.
i was hung up by trying to write a 6M file to the disk. thought it trough and changed the code to write 512K chunks at a time (3min work, fast).
probably it still has some little annoying glitches like making you think on root lvl but the ease of use and the features are just way too sweet to ignore.

How to decide whether I should use AIR or Titanium

I may want to create a RIA but am wondering, whether Adobe AIR or Titanium is the way to go.
Do you think the open source version will last longer? Will it be better in anyway?
Just in case anyone comes back to this post, I'll add my 2 cents.
Titanium has come along way in the last few months. It now has support for Ruby and Python. You can code your own modules in C++ (eg, IRC) and compile Titanium to have support for that module (Or you can code modules in Py/Ru/JS).
You can use flex, flash and silverlight all within Titanium. All have been tested and work without a hitch :)
Although AIR isn't open source yet, the technology stack it's on (Flex, Webkit, etc) is open source. Titanium definitely looks promising but has no where near the momentum and support AIR has yet. Until it's been actually released and has several production apps running on it I wouldn't bet too much on it.If you're looking to get involved in an open source project and actually work and help develop it that's something else...
Just to clarify, AIR lets you use HTML/js to build your apps as well.
Neither, as both technologies are for creating desktop applications not RIAs.
Now if you were to ask how should you build your RIA... so that when, if, it comes to a point of you making a desktop version, which technology should you use, Flex or Javascript/HTML?
The answer becomes obvious once you decide between Flex or Javascript/HTML. If you do Flex then your desktop application will be in AIR; If you do Javascript/HTML your Descktop app will be in Titanium.
My suggestion, go with Flex - Air. Both are environments where State is made easy. Flex are written much like client (desktop) applications anyway as they have state.