12.12 Performance Checklist

  • Use a relay server to examine data transfers.

  • Reduce the number of messages transferred.

    • Cache data and objects to change distributed requests to local ones.

    • Batch messages to reduce the number of messages transferred.

    • Compress large transfers.

    • Partition the application so that methods execute where their data is held.

    • Multiplex communications to reduce connection overhead.

    • Stub out data links to reduce the amount of data required to be transferred.

  • Design the various components so that they can execute asynchronously from each other.

    • Anticipate data requirements so that data is transferred earlier.

    • Split up data so that partial results can be displayed.

    • Avoid creating distributed garbage.

  • Optimize database communications. Application partitioning is especially important with databases.

    • Use statically defined database queries.

    • Avoid database transactional modes if possible.

    • Use JDBC optimizations such as prepared statements, specific SQL requests, etc.

  • Try to break down the time to execute a Web Service into client, server, and network processing times, and extract the marshalling and unmarshalling times from client and server processing.

  • Don't forget about DNS resolution time for a Web Service.

  • Try to load-balance high-demand Web Services or provide them asynchronously.

  • The granularity of a Web Service is important. For more scalable and better performing Web Services, create coarser services that require fewer network requests to complete.