36
Proprietary + Confidential App user experience report Powered by HeadSpin @google.com

Powered by HeadSpin App user experience report

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Powered by HeadSpin App user experience report

Proprietary + Confidential

App user experience reportPowered by HeadSpin

@google.com

Page 2: Powered by HeadSpin App user experience report

Proprietary + Confidential

We tested your app through 10 iterations on key devices

Device class BudgetMoto E2 like OS version: 5

New YorkAT&T<$200

Mid RangeLG Nexus 5x likeOS version: 7.1

New YorkAT&T$200 - $500

High EndSamsung S8 likeOS version: 7.1

New YorkSprint$500+

App penetration on device

XX% XX% XX% HeadSpin Console

Page 3: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

App Startup

Page 4: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

Your app takes ~6.32s before a user can interact (TTI)

Budget Mid Range High end

Fixing these issues could improve your TTI by 3,800 ms

Client side

View in HeadSpin Console

eBay app requests to three servers:1. Mobidcs.ebay.com2. Apisd.ebay.com3. svcs.ebay.com

These requests are made sequentially. Parallelizing the requests will boost the startup time significantly

Page 5: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

How eBay compares to peers on Time To Usable UIClient side

Rank App TTI

1 Target 4900

2 Ebay 6320

3com.alibaba.aliexpresshd 8500

4 Walmart 11520

5 com.contextlogic.wish 11778

6 com.offerup 12795

7com.amazon.mShop.android.shopping 13400

8 com.groupon 13440

Rank App TTI

1 Target 1,840

2com.alibaba.aliexpresshd 2,280

3 Ebay 2,500

4com.amazon.mShop.android.shopping 3,280

5 Walmart 3,960

6 com.contextlogic.wish 4,660

7 com.offerup 7,242

8 com.groupon 9,600

Rank App TTI

1 Ebay 1,100

2 Walmart 1,360

3 Target 1,500

4 com.alibaba.aliexpresshd 1,900

5com.amazon.mShop.android.shopping 2,680

6 com.contextlogic.wish 3,374

7 com.offerup 3,840

8 com.groupon 9,400

Budget Mid Range High End

Focus on improving performance on budget and mid range devices (80% market share)

Page 6: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + ConfidentialeBay App’s TTI (Usable UI) vs similar apps in key marketsBased on metrics captured on a Samsung S7 on cellular connection

App United Kingdom Germany Australia India Brazil

eBay 5.88 16.32 30 14 8.36

Amazon 7.64 21.88 2.84 6 10.76

AliExpress 6.12 7.4 8.16 10.84 24.4

Wish 4 7.5 3 9.1 12.4

OfferUp 3.9 5.8 1.3 3 5.2

Walmart 8.5 9.16 7.8 7.9 28

Target 2.12 3.16 1.24 3.8 1.2

Groupon 11.84 3 4.56 2.76 10.96

SnapDeal N/A N/A N/A FAILS N/A

Page 7: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + ConfidentialeBay App fails to load in India ~ 50% of the times

View in HeadSpin Console

eBay API Server “api.ebay.com” resolves to 66.211.179.150

This Server is located in North America.

It takes > 1.2 seconds to create a TCP + TLS connection from a device in India

Page 8: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + ConfidentialYour app takes 4.7s for a cold startup 2.5s higher than the max recommended time

Top issues causing slowdowns

UI Blocked Method

133 ms SearchResultFragmentActivity.onCreate

Hung CPU methodsHung methods make the UI lag and become unresponsive to the user for longer than 32ms. Methods reported here are doing so because they are using the CPU during this time.

Hot methodsA hot method takes more than 100ms of total app CPU time to execute all its calls.

Total CPU Time

Calls Method

636 ms 40 ReflectiveTypeAdapterFactory.getBoundFields

DependenciesSometimes dependencies you include in your app may affect performance. Below are the ones that are significantly impacting performance.

CPU Time SDK Name

751 ms GSON

Client side server

View in HeadSpin Console

Page 9: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

APK Size

Page 10: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

Reducing your APK size increases the likelihood users will install and keep your app on their device

Given your app is 36 MB, users on..

.. WiFi (5 Mbps) will wait 45.2s

.. 3G (1.6 Mbps) will wait 120.4s

.. 2G (150 Kbps) will wait +8 minutes (timed out)

Case study published on Medium showed every 6 MB increase to an APK’s size decreases install conversion by 1%.

Page 11: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

You can reduce your APK size from 33.8 MB to 10.8 MB

36

Current APK size

19

*Estimated APK size

Benefits of having a smaller APK

Instant apps/App Bundles?

Large files (>0.10 MB):classes.dex (3 MB)resources.arsc (1.73 MB)META-INF/CERT.SF (0.26 MB)META-INF/MANIFEST.MF (0.25 MB)res/drawable-xxxhdpi-v4/download_pulse_bg.jpg (0.17 MB)res/drawable-xhdpi-v4/bg_instay_rating.jpg (0.16 MB)lib/armeabi-v7a/libmapgraph.so (0.15 MB)res/drawable-xxhdpi-v4/where_to_next_photo.jpg (0.14 MB)res/drawable-xxxhdpi-v4/login_background_image.webp (0.12 MB)assets/fonts/booking-iconset-Regular.ttf (0.11 MB)

16.57

4.25

1.36

Optimize config files

Proguard

Images to webp

*Please note that these numbers are just estimates, as we do not have access to your codebase.

Page 12: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

Battery usage

Page 13: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

Merge network requests to reduce radio wakeups

Off

Dormant

Send

Snd/Rcv

Lack of connection reuse, excessive new connections due to several Third party APK/SDK causes the mobile radio to be mostly Active and never IDLE.

Page 14: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

eBay App High Resource Usage - Samsung S8, AT&T

The Radio State is always between SEND and SND/RECV State, i.e. the Radio never IDLEs.

CPU Usage is also quite high on all the cores.

Both the above result in significantly high battery consumption

● eBay app consumed 14% battery power around 10 mins of use with min screen brightness when tested on a Samsung S8.

Mobile Data State Mobile Data State 4.556035684GPU Load GPU Load [%] 4.528411568CPU Load CPU Load [%] 53.37363755CPU Load (Normalized) CPU Load [%] 21.48408662CPU1 Load CPU Load [%] 55.0697573CPU2 Load CPU Load [%] 48.92951606CPU3 Load CPU Load [%] 30.56183694CPU4 Load CPU Load [%] 24.00595844

Page 15: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

eBay High Resource Usage Regions - Samsung S8, AT&T

● Memory usage increases by ~ 35 MB during app launch

● High Disk activity during search

Page 16: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

Progressive loading

Page 17: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

We recommend using Volley to handle your Http requests. Volley offers the following benefits:

● Automatic scheduling of network requests.

● Multiple concurrent network connections.

● Transparent disk and memory response caching with standard HTTP cache coherence.

● Support for request prioritization.

● Cancellation request API. You can cancel a single request, or you can set blocks or scopes of requests to cancel.

● Ease of customization, for example, for retry and backoff.

● Strong ordering that makes it easy to correctly populate your UI with data fetched asynchronously from the network.

Images take 3-4s to load as you load and scrollYour code indicates you are using a framework called Nautilus

./com/ebay/nautilus/kernel/dagger/DaggerKernelComponent$RequestSubcomponentImpl.java:import com.ebay.nautilus.kernel.net.HttpUrlConnectionFactory;

./com/ebay/nautilus/kernel/dagger/DaggerKernelComponent$RequestSubcomponentImpl.java:import com.ebay.nautilus.kernel.net.RequestControllerHttpUrlConnection;

Page 18: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

Images take 3-4s to load as you load and scroll

View in HeadSpin Console

Page 19: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

Permissions

Page 20: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

Consider removing excessive permissions

Permissions Protection level Recommendations

WAKE_LOCK Normal You could minimize the impact of your app on system

resources by using alternative approaches to keep the

screen and CPU awake

SET_ALARM Normal You probably don’t need permissions to set an alarm for the user

Excessive permissions may discourage users from installing your app.

Page 21: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

Search execution time

Page 22: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

Optimize your search queries - Slow API/CDN Requests

Budget Mid Range High end ● Item search time takes ~ 6.32 seconds

● The search API Call alone takes ~ 2.16 seconds to respond

● Creating new TLS/TCP Connects to the CDN takes ~ 470ms

● Fixing the above two will reduce search time to ~ 2.9 seconds or lower

View in HeadSpin Console

Page 23: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

Slow API calls impacting Search timesSearch API call takes > 2 seconds to respond

Http POST to https://apisd.ebay.com/search/v2

Page 24: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

CDN Connectivity Time is too High!Time to create a new TCP/TLS Connect is ~ 470ms

● Image are hosted and served out of Akamai

● Images are in WEBP format, small sized. Download and render fast

● But TCP/TLS Connect time impact the image loading experience

● Recommend re-using the existing TCP/TLS Connections for new Https requests

Page 25: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

Time to Checkout

Page 27: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

How eBay compares to peers on Time To Checkout

Rank App Time to Checkout (ms)

1 Groupon 700

2 AliExpress 850

3 OfferUp 1324

4 Wish 1700

5 eBay 2040

6 Amazon 2160

7 Walmart 5000

8 Target 11440

Rank App Time to Checkout (ms)

1 Wish 500

2 Amazon 650

3 OfferUp 800

4 eBay 900

5 AliExpress 920

6 Walmart 1200

7 Groupon 1863

8 Target 7960

Rank App Time to Checkout (ms)

1 eBay 320

2 OfferUp 400

3 Amazon 500

4 Walmart 580

5 AliExpress 800

6 Groupon 1100

7 Wish 1800

8 Target 5840

Budget Mid Range High End

Focus on improving performance on budget and mid range devices (80% market share)

Page 28: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

Slow 3p Requests

Page 29: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

DoubleClick downloads large sized JPEG’sThese images take > 1 second to download!

https://s0.doubleclick.net/8878992/2-Urgent_Branded_Image.jpg

View in HeadSpin Console

3P Domain Sharding Problem

Page 30: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

8 third party domains and 18+ servers accessed!

Excessive third party requests and SDKs

View in HeadSpin Console

Page 31: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

Summary of recommendations

Page 32: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

Recommendation Summary

● Requests to the API servers must be parallelized to speed up startup time by ~ 60%● Optimize your App Startup time in Germany, Australia and Mexico● Apps fails to load in India ~ 50% of the times● Fixing HOT Methods can reduce Cold Startup Times by ~ 25%● Implement config APKs, Proguard and image optimizations to reduce the size of your

apk

● Merge multiple network requests to reduce latency and make your app battery

utilization more efficient

● Consider using Volley library to handle API requests as it better handles

synchronization between concurrent network connections

● Fix Search API Call and reusing CDN TCP/TLS Connections will boost Search time by ~

40%

● Remove unwanted permissions - wakelock and set alarm

● Third Party SDK/API must be reduced to eliminate poor UX issues

Page 33: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

HeadSpin Console

Page 34: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

Page 35: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

Page 36: Powered by HeadSpin App user experience report

Proprietary + ConfidentialProprietary + Confidential

Thank you!

Run more Performance and User Experience tests on HeadSpin