我做了一个实验,并在Google云端平台上安装了相同的应用程序,使用相同的数据库,并在2个不同的位置安装相同的存储桶(用于图像):us-central和europe-west。但是,加载时间差别很大。我在西班牙,令人惊讶的是,我们中心的人要快得多。
申请信息:
SQL(两者都相同):
存储(Google存储桶):
加载时间(在缓存后进行一些刷新):
欧洲西部的那个太慢,不实用。为何如此区别?或者我在这里配置错误了什么?在配置中我还应该注意什么,以使欧洲 - 西部像我们中心一样快速运行?
答案 0 :(得分:1)
好的,所以与Google支持小组讨论,我发现确实存在加载差异,但这并不是因为服务器速度较慢。
差异来自对CloudStorageTools API的调用,即@Override
public void start(Stage stage) {
ObservableList<PieChart.Data> data = FXCollections.observableArrayList();
PieChart pieChart = new PieChart(data);
PieChart.Data one = new PieChart.Data("one", 50.0);
PieChart.Data two = new PieChart.Data("two", 33.0);
PieChart.Data three = new PieChart.Data("three", 17.0);
data.addAll(one, two, three);
one.getNode().addEventFilter(MouseEvent.MOUSE_PRESSED, mouseEvent -> {
ScaleTransition st = new ScaleTransition(Duration.millis(1500),one.getNode());
st.setByX(0.3);
st.setByY(0.3);
st.setCycleCount(1);
st.setAutoReverse(false);
st.play();
});
two.getNode().addEventFilter(MouseEvent.MOUSE_PRESSED, mouseEvent -> {
ScaleTransition st = new ScaleTransition(Duration.millis(1500),two.getNode());
st.setByX(0.3);
st.setByY(0.3);
st.setCycleCount(1);
st.setAutoReverse(false);
st.play();
});
three.getNode().addEventFilter(MouseEvent.MOUSE_PRESSED, mouseEvent -> {
ScaleTransition st = new ScaleTransition(Duration.millis(1500),three.getNode());
st.setByX(0.3);
st.setByY(0.3);
st.setCycleCount(1);
st.setAutoReverse(false);
st.play();
});
//create root group
Group root = new Group();
//set up window
//add nodes to root
root.getChildren().addAll(pieChart);
Scene scene = new Scene(root, 500,500);
stage.setTitle("Testing arc animation");
stage.setScene(scene);
stage.show();
}
。从欧洲访问API比每次呼叫从美国服务器慢约100毫秒到约200毫秒。由于我平均每次拨打15个电话,这导致每页加载时间明显不同。
我的解决方案是在映像创建时缓存对CloudStorageTools.getImageServingUrl()
的调用,并将结果保存在数据库中。然后在显示图像时,只需从数据库加载Url并避免每次调用API。
Google支持部门确认,虽然没有记录,但欧洲和美国之间CloudStorageTools API访问时间的差异是预期的行为。