Meh*_*lan 6 react-native expo metro-bundler
我对Expo和React-Native的机制,它们如何下载资产感到困惑。
我知道的信息是,一旦您构建代码,expo就会准备一个捆绑包,其中同时包含javascript(编译后的代码)和资产。
并且在调试会话期间,该捆绑包-整体上-首先由expo客户端下载,然后启动该应用程序。这意味着一旦启动应用程序,代码中所有“导入”的资产都应就位。
另一方面,当我运行以下原子测试代码时,这是完全相反的。加载这些资产需要花费时间,就像它们是“延迟加载”一样。
所以我的问题是;行为开发模式相关吗?还是在生产模式下下载图像仍然需要时间?
import * as React from 'react';
import { Text, View, StyleSheet, Image, Button } from 'react-native';
import Test0Img from './assets/test0.gif';
import Test1Img from './assets/test1.gif';
export default class App extends React.Component {
constructor() {
super();
this.state = {
imageIndex: 0,
};
}
render() {
return (
<View style={styles.container}>
<Text></Text>
<Text></Text>
<Button
onPress={() => {
let l_newImageIndex = (this.state.imageIndex + 1) % 2;
this.setState({ imageIndex: l_newImageIndex });
}}
title="Click to Change Image"
/>
<Image
source={this.state.imageIndex === 1 ? Test0Img : Test1Img}
style={{
width: '100%',
height: '100%',
resizeMode: 'contain',
}}
/>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
backgroundColor: '#ecf0f1',
padding: 8,
},
});
Run Code Online (Sandbox Code Playgroud)
可以在此小吃中看到代码:https : //snack.expo.io/@mehmetkaplan/assetdownloadtest
如果您在手机上运行此代码,很可能会发现动画gif并不容易更改。但是,如果您通过网络运行它,更改速度会更快。
世博文档在这里指出:
对于保存到本地文件系统的图像,请使用Asset.fromModule(image).downloadAsync()下载并缓存该图像。还有一个loadAsync()帮助器方法来缓存一批资产。
这也与上面的问题有关,如果图像在本地文件系统中,为什么还要缓存图像呢?
同样的问题也加入到世博会论坛,可以看出这里。链接两者,以便将来的访客找到任何可能的答案。
为了方便后代,以下是一位 Expo 工程师在 Expo 论坛上发布的答案:
\n\n\n在 Expo 客户端的开发过程中,将从您的本地环境下载图像。由于在开发模式期间运行的所有额外进程(例如验证检查、远程调试、热重载(如果启用)等),这将需要更长的时间。您可以在此处阅读有关此内容的更多信息:https ://docs.expo.io/versions /v34.0.0/工作流程/开发模式/
\n在 Expo Client 中运行已发布的项目时,它将从 CDN (CloudFront) 获取您的资源,在这种情况下,您\xe2\x80\x99 将希望使用 AppLoading 模块来预获取资源并仅隐藏启动画面所有资源加载到内存后的屏幕。
\n在构建独立应用程序时,您可以选择将资产捆绑到二进制文件中(大多数人应该使用二进制文件,除非它们具有异常数量的资产或文件大小很大的资产),这将导致资产更快地加载到内存中,因为它们将从本地磁盘获取,而不是向 CDN 发出网络请求。
\n
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |