A propper way to load images
Los mantenedores suelen responder en 2 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- objective-c, react-native
- Área
- mobile, performance
Línea de trabajo
Comienza revisando la integración de image-loader de React Native y el ejemplo proporcionado de EnrichedImageLoader, incluidos sus caminos para los recursos locales y el manejo de headers. Determina cómo deben integrarse los loaders de iOS y Android; el trabajo estará terminado cuando las solicitudes repetidas para la misma URL de imagen se dedupliquen sin romper los recursos locales ni los headers de las solicitudes.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Problem
Currently, if we have multiple images with the same URL, we will fire multiple requests for them. It's okay when we have different small images. But if someone, for some reason, inserts a lot of full hd images with the same url it will take longer to download all of them separately.
Critical problems:
- Unnecessary CPU pressure
- Additional work for servers
- Additional network data usage.
Solution
We should implement/extend react-native's Imageloader or add our own image loader with SDWebImage for ios or GlideLoader for Android.
Here is a simple example with SDWebImageLoader that we currently use in our app:
#import "EnrichedImageLoader.h"
#import <React/RCTUtils.h>
@implementation EnrichedImageLoader
+ (instancetype)shared {
static EnrichedImageLoader *shared;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shared = [self new];
shared.sdManager = [SDWebImageManager sharedManager];
});
return shared;
}
- (void)loadImage:(NSURL *)url completion:(void (^)(UIImage *))completion {
if (!url) {
completion(nil);
return;
}
if (RCTIsLocalAssetURL(url)) {
completion(RCTImageFromLocalAssetURL(url));
return;
}
[self.sdManager
loadImageWithURL:url
options:SDWebImageHighPriority
progress:nil
completed:^(UIImage *_Nullable image, NSData *_Nullable data,
NSError *_Nullable error, SDImageCacheType cacheType,
BOOL finished, NSURL *_Nullable imageURL) {
completion(image);
}];
}
- (void)loadImage:(NSURL *)url
headers:(NSDictionary<NSString *, NSString *> *)headers
completion:(void (^)(UIImage *image))completion {
if (!url) {
completion(nil);
return;
}
SDWebImageDownloaderRequestModifier *requestModifier =
[SDWebImageDownloaderRequestModifier
requestModifierWithBlock:^NSURLRequest *_Nullable(
NSURLRequest *_Nonnull request) {
NSMutableURLRequest *modifiedRequest = [request mutableCopy];
for (NSString *key in headers) {
[modifiedRequest setValue:headers[key] forHTTPHeaderField:key];
}
return modifiedRequest;
}];
SDWebImageContext *context =
@{SDWebImageContextDownloadRequestModifier : requestModifier};
[self.sdManager
loadImageWithURL:url
options:SDWebImageHighPriority
context:context
progress:nil
completed:^(UIImage *_Nullable image, NSData *_Nullable data,
NSError *_Nullable error, SDImageCacheType cacheType,
BOOL finished, NSURL *_Nullable imageURL) {
completion(image);
}];
}
@end
- Lenguaje dominante
- C
- Estrellas
- 1.4k
- Forks
- 67
- Merge medio
- 4 d 11 h
- PR fusionados (30 d)
- 7
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de software-mansion/react-native-enriched-html
-
HIGH level tiptap package advisoryPosiblemente ocupada @hejsztynx la tomó hace 14 días. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
software-mansion/react-native-enriched-html#802 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
software-mansion/react-native-enriched-html#618 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
Support for `<raw-text-block>`Abiertoenhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
software-mansion/react-native-enriched-html#803 ·
Los mantenedores suelen responder en 2 días
-
Add support for nested listsAbierto
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
software-mansion/react-native-enriched-html#800 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
Text immediately before an `<img>` sometimes fails to repaint on iOS after a screen revisit (`EnrichedText`)Posiblemente ocupada @hejsztynx la tomó hace 14 días. Abiertobug
Dificultad 4/5 3-5 días Aptitud para principiantes 38/100
software-mansion/react-native-enriched-html#798 · 4 comentarios ·
Los mantenedores suelen responder en 2 días
Todos los issues de software-mansion/react-native-enriched-html
Issues similares
-
Status: Opened
Dificultad 1/5 Menos de una hora Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 90/100
Los mantenedores suelen responder en 3 días
-
Type: Bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
espressif/idf-extra-components#870 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día