immich icon indicating copy to clipboard operation
immich copied to clipboard

[BUG] Shared album loading is very slow when accessed using the link

Open RyanShahidi opened this issue 2 years ago • 3 comments

The bug

I’m having trouble accessing an album I’m trying to share. When I access the album while I’m logged in, it loads quickly. However, when I access the album using the link that is created from sharing, it takes a very long time to load and is not usable. This slowness is only present when accessing the shared link and has not appeared in any other use case. I’ve tried accessing the album from multiple devices, and all of them have been incredibly slow. It also doesn’t appear to be an internet connection issue as it occurs locally and is fast when logged in. I’ve updated to the latest version, but the issue existed prior to this version number and has persisted. Let me know if I can provide any other info to help!

The OS that Immich Server is running on

Unraid V6.11.5

Version of Immich Server

v1.51.0

Version of Immich Mobile App

v1.50.0

Platform with the issue

  • [ ] Server
  • [X] Web
  • [ ] Mobile

Your docker-compose.yml content

version: "3.8"

services:
  immich-server:
    container_name: immich_server
    image: altran1502/immich-server:release
    entrypoint: ["/bin/sh", "./start-server.sh"]
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
    env_file:
      - .env
    environment:
      - NODE_ENV=production
    depends_on:
      - redis
      - typesense
    #   - database
    restart: always
    networks:
      - enterprise-net
      
  immich-microservices:
    container_name: immich_microservices
    image: altran1502/immich-server:release
    entrypoint: ["/bin/sh", "./start-microservices.sh"]
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
    env_file:
      - .env
    environment:
      - NODE_ENV=production
    depends_on:
      - redis
      - typesense
    #   - database
    restart: always
    networks:
      - enterprise-net
      
  immich-machine-learning:
    container_name: immich_machine_learning
    image: altran1502/immich-machine-learning:release
    command: [ "python", "src/main.py" ]
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - model-cache:/cache
    env_file:
      - .env
    environment:
      - NODE_ENV=production
    # depends_on:
    #   - database
    restart: always
    networks:
      - enterprise-net
      
  immich-web:
    container_name: immich_web
    image: altran1502/immich-web:release
    entrypoint: ["/bin/sh", "./entrypoint.sh"]
    env_file:
      - .env
    restart: always
    networks:
      - enterprise-net
      
  redis:
    container_name: immich_redis
    image: redis:6.2
    restart: always
    networks:
      - enterprise-net
#   database:
#     container_name: immich_postgres
#     image: postgres:14
#     env_file:
#       - .env
#     environment:
#       POSTGRES_PASSWORD: ${DB_PASSWORD}
#       POSTGRES_USER: ${DB_USERNAME}
#       POSTGRES_DB: ${DB_DATABASE_NAME}
#       PG_DATA: /var/lib/postgresql/data
#     volumes:
#       - pgdata:/var/lib/postgresql/data
#     restart: always

  immich-proxy:
    container_name: immich_proxy
    image: altran1502/immich-proxy:release
    environment:
      # Make sure these values get passed through from the env file
      - IMMICH_SERVER_URL
      - IMMICH_WEB_URL
    ports:
      - 2283:8080
    logging:
      driver: none
    depends_on:
      - immich-server
    restart: always
    networks:
      - enterprise-net
      
  typesense:
    container_name: immich_typesense
    image: typesense/typesense:0.24.0
    environment:
      - TYPESENSE_API_KEY=${TYPESENSE_API_KEY}
      - TYPESENSE_DATA_DIR=/data
    logging:
      driver: none
    networks:
      - enterprise-net
    volumes:
      - tsdata:/data
networks:
    enterprise-net:
        external: true
        name: enterprise-net
volumes:
    model-cache:
    tsdata:
#   pgdata:

Your .env content

###################################################################################
# Database
###################################################################################

DB_HOSTNAME=192.168.1.101
DB_USERNAME=immich
DB_PASSWORD=redacted
DB_DATABASE_NAME=immich

# Optional Database settings:
DB_PORT=5432

###################################################################################
# Redis
###################################################################################

REDIS_HOSTNAME=immich_redis

# Optional Redis settings:
# REDIS_PORT=6379
# REDIS_DBINDEX=0
# REDIS_PASSWORD=
# REDIS_SOCKET=

###################################################################################
# Upload File Location
#
# This is the location where uploaded files are stored.
###################################################################################

UPLOAD_LOCATION=/mnt/user/immichStorage

###################################################################################
# Typesense
###################################################################################
TYPESENSE_API_KEY=redacted
# TYPESENSE_ENABLED=false

###################################################################################
# JWT SECRET
#
# This JWT_SECRET is used to sign the authentication keys for user login
# You should set it to a long randomly generated value
# You can use this command to generate one: openssl rand -base64 128
###################################################################################

JWT_SECRET=redacted

###################################################################################
# Reverse Geocoding
#
# Reverse geocoding is done locally which has a small impact on memory usage
# This memory usage can be altered by changing the REVERSE_GEOCODING_PRECISION variable
# This ranges from 0-3 with 3 being the most precise
# 3 - Cities > 500 population: ~200MB RAM
# 2 - Cities > 1000 population: ~150MB RAM
# 1 - Cities > 5000 population: ~80MB RAM
# 0 - Cities > 15000 population: ~40MB RAM
####################################################################################

# DISABLE_REVERSE_GEOCODING=false
# REVERSE_GEOCODING_PRECISION=3

####################################################################################
# WEB - Optional
#
# Custom message on the login page, should be written in HTML form.
# For example:
# PUBLIC_LOGIN_PAGE_MESSAGE="This is a demo instance of Immich.<br><br>Email: <i>[email protected]</i><br>Password: <i>demo</i>"
####################################################################################

PUBLIC_LOGIN_PAGE_MESSAGE=

####################################################################################
# Alternative Service Addresses - Optional
#
# This is an advanced feature for users who may be running their immich services on different hosts.
# It will not change which address or port that services bind to within their containers, but it will change where other services look for their peers.
# Note: immich-microservices is bound to 3002, but no references are made
####################################################################################

IMMICH_WEB_URL=http://immich-web:3000
IMMICH_SERVER_URL=http://immich-server:3001
IMMICH_MACHINE_LEARNING_URL=http://immich-machine-learning:3003

####################################################################################
# Alternative API's External Address - Optional
#
# This is an advanced feature used to control the public server endpoint returned to clients during Well-known discovery.
# You should only use this if you want mobile apps to access the immich API over a custom URL. Do not include trailing slash.
# NOTE: At this time, the web app will not be affected by this setting and will continue to use the relative path: /api
# Examples: http://localhost:3001, http://immich-api.example.com, etc
####################################################################################

#IMMICH_API_URL_EXTERNAL=http://localhost:3001

Reproduction steps

1. Put either a large amount of pictures (in this example, 671 photos) or a large picture size into an album. 
2. Share the album link.
3. Access the album from the web while logged-out of immich.

Additional information

No response

RyanShahidi avatar Mar 20 '23 20:03 RyanShahidi

Is it only slow with an album with many photos or also slow with an album with fewer photos? Let's say ten photos.

alextran1502 avatar Mar 21 '23 15:03 alextran1502

It seems to be able to do that without any issue. After playing around with it, I think it starts to happen right around 130 photos. Sometimes it will load a little less than that before stopping and other times a little more, but that seems to be about an average.

RyanShahidi avatar Mar 21 '23 17:03 RyanShahidi

I am having this same issue. I have an album with 10,234 photos. When I'm logged in and accessing the album, performance is good (great even).

However when using the link it's incredibly slow. Using web inspector, I can see the time to load the thumbnails is consistently around 167ms when logged in and 9600ms when not logged in.

mjsamberg avatar Jul 15 '23 02:07 mjsamberg