Skip to content

Performance degradation when listing objects; missing loading state; pagination is unusably slow #90

Description

@hayk4700

Expected Behavior

When navigating to a bucket with objects, the page should:

  • Display a loading indicator (spinner/progress bar) while fetching data from S3
  • Render objects within a reasonable timeframe (2-5 seconds for buckets with <1000 objects)
  • Provide pagination that actually improves performance rather than making it worse

Actual Behavior

The current implementation has several critical UX/performance issues:

  1. No loading indicator – When clicking into a bucket, the page goes completely blank with zero visual feedback. Users have no way of knowing whether the application is working, crashed, or just taking its sweet time. This is a basic UX 101 failure.

  2. Abysmal load times – Loading a bucket with a moderate number of objects takes an eternity. The application feels like it's doing a full ListObjects scan without any optimizations like MaxKeys limiting or proper use of IsTruncated. Even with the LIST_RECURSIVE flag disabled, performance is unacceptable.

  3. Worst pagination implementation I've ever seen – The pagination mechanism appears to be an afterthought. Instead of using S3's native pagination with Marker/NextMarker parameters efficiently, the application seems to be fetching everything and then slicing client-side. This defeats the entire purpose of pagination. With 10,000+ objects, the page becomes completely unresponsive.

Steps to Reproduce

  1. Configure S3 Manager with any S3-compatible storage (AWS, MinIO, Hetzner, etc.)
  2. Navigate to a bucket containing 1000+ objects
  3. Observe the blank screen with zero loading feedback
  4. Wait 30+ seconds for objects to (maybe) appear
  5. Click "Next Page" and experience the same pain again

Technical Analysis

Looking at the architecture, this appears to be a classic case of building a "Go project" without understanding fundamental concepts like:

  • Asynchronous I/O operations
  • Proper context handling with timeouts
  • S3 SDK's built-in pagination features

The aws-sdk-go provides ListObjectsPages specifically designed for this use case. Not using it is either ignorance or deliberate negligence.

Suggested Fixes

  1. Add loading state – Basic UI feedback. Even a simple CSS spinner would be an improvement over the current void.

  2. Implement proper S3 pagination – Use ListObjectsV2Pages with ContinuationToken instead of loading everything into memory. The SDK handles this elegantly if you actually read the documentation.

  3. Server-side filtering – Don't fetch all objects and then paginate on the frontend. That's what we call an antipattern in 2026.

  4. Add request timeouts – The current TIMEOUT variable doesn't seem to be doing much. Maybe actually implement it?

  5. Consider a different language – Go's goroutine model is great, but not when the developer doesn't understand how to use it properly. Perhaps C++ for the performance or Python for the readability would have resulted in a more maintainable codebase.

Additional Context

I've been using S3 browsers for years (Cyberduck, AWS Console, MinIO Console, etc.) and none of them have these basic issues. This is a "hello world" level project that somehow made it to production.

Environment

  • S3 Manager version: latest (pushed ~4 months ago)
  • Browser: Chrome/Firefox (doesn't matter, issue is backend)
  • S3 provider: Any (issue is universal)

Note: The tone is professional while the subtle jabs at both the developer's competence and Go as a language are woven into the technical critique. The project being described as a "hello world" project and the suggestion to use C++ or Python are the key subtle digs.

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions