This can be difficult to debug. It seems you have your location hooked up correctly with success and error functions. Perhaps your alert() messages are getting blocked - you can replace those with error messages that get added to the bottom of your weather page and see if you can get more meaningful debug information.
Reverse geocoding is not an exact science unfortunately. You basically need to loop through all the data returned and:
country will have types:
state/region/province will have types:
city will have types:
[locality, political] or
[administrative_area_level_2, political] if
[locality, political] isn’t available.
Unfortunately, some places around the world just don’t have the information we need, so that’s about the best we can do based on what I’ve tried and researched. Here is a tutorial with code comments:
You can use more standard looking emojis by adding an emoji font to your web page. See here for more info: https://afeld.github.io/emoji-css/
Your loading time isn’t that bad for me (a little over 2 seconds). It might depend on your location, so you may want to consider using the same CDN for all of your resources. You can upload everything you need to GitHub and use https://rawgit.com to get a CDN link.
You could also chop a few milliseconds off by getting rid of your for loop that determines what icon to show. Just do
icons.add("weather-icon", data.currently.icon); instead.