我了解我可以将所有用户会话中的某些对象放在server.R
中,但在shinyServer()
的调用之外。但即使没有人使用该应用程序,有没有办法将这些对象保存在内存中?我需要很长时间才能从磁盘加载这些共享对象,因此我希望通过保持加载并永久性地为用户加快速度。#/ p>
答案 0 :(得分:3)
创建一个文件global.R并将那些加载数据的代码放在那里。但是,如果服务器休眠或重置内存中的信息将丢失。
shinyapps.io有一个“Instance Idle Timeout”设置,你可以设置为让应用程序保持更长时间。您还可以在配置文件中为闪亮服务器设置一个值。见下面的链接
http://rstudio.github.io/shiny-server/latest/#application-timeouts
答案 1 :(得分:0)
您可能想要考虑的一件事是使用全局/封闭环境赋值运算符:
assign()
这可以用来将变量暴露给全局环境,并在Shiny会话之间持续存在。
或者,您可以选择使用import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class ScrambleWords {
private static Scanner file;
private static List<String> words = new ArrayList<String>();
private static List<Character> characters = new ArrayList<>();
public static void openFile() {
try {
file = new Scanner(new File("words.txt"));
} catch (FileNotFoundException e) {
System.out.println("File Not Found");
e.printStackTrace();
} catch (Exception e) {
System.out.println("IOException");
}
}
public static String randomWord() {
Random r = new Random();
while(file.hasNext()) {
words.add(file.next());
}
Collections.shuffle(words);
String randomWord = words.get(r.nextInt(words.size()));
return randomWord;
}
public static String readScramble(String randomWord) {
for(char ch : randomWord.toCharArray()) {
characters.add(ch);
}
Collections.shuffle(characters);
StringBuilder sb = new StringBuilder();
for(char ch: characters) {
sb.append(ch);
}
return sb.toString();
}
public static void main(String[] args) {
openFile();
String scramble = readScramble(randomWord());
System.out.println("Scramble Word is: " + scramble);
String random = randomWord();
System.out.println("Random Word is: " + random);
}
}
功能选择要设置的环境;我相信,有一个处理环境的系统变量:{{3}}