Yes, I would recommend renaming the helper.R script to global.R.
Also, yes, if you load libraries or define global variables in the global.R script than you do not need to reload libraries or redefine the variables in your ui.R or server.R file.
Essentially, when you run your shiny application, the global.R script is run and everything in it is then in the global environment and can be accessed by either the ui.R or server.R script.
source is a function that allows you to call scripts inside of other scripts. So as a brief example:
# source in another script that defines variable foo
source("path/to/foo-script.R")
foo_two <- foo * 2
so in this example, my current script does not define the variable foo. But since I use the source function to call a script that does define the variable foo, I then am able to use the variable foo in the rest of the script. The same thing can be used in a shiny app. But if you are not doing anything super intensive or with a large number of lines, I find it easier to just do this all in the global.R script. If you do have an operation you want to define in global.R that is really long you could always store it in a separate script (i.e. like helper.r to define a set of helper functions) and then source that script in your global.R file.
The real benefit to the global.R file is that you can define things in one place so that both your ui.R and server.R scripts can access them without having to define them in both places.