jsgo

GopherJS compiler, serving framework and CDN.

  • 所有者: dave/jsgo
  • 平台:
  • 许可证: MIT License
  • 分类:
  • 主题:
  • 喜欢:
    0
      比较:

Github星跟踪图

jsgo.io

GopherJS is an amazing tool, but I've always been frustrated
by the size of the output. All the packages in the dependency tree (including the standard library)
are compiled to a single JS file. This can cause the resultant file to be several megabytes.

I've always thought a better solution would be to split the JS up by package and store it in a centralized
CDN. This architecture would then allow aggressive caching: If you import fmt, it'll be delivered as
a separate file fmt.js, and there's a good chance some of your visitors will already have it in their
browser cache. Additionally, incremental updates to your app will only change the package you're updating,
so your visitors won't have to download the entire dependency tree again.

jsgo.io makes this simple.

Features

  • Compiles Go to JS using GopherJS.
  • Splits the JS up by Go package.
  • Stores the JS in a CDN for you (GCP / Cloudflare).
  • Aggressively caches the JS.
  • Creates a page on jsgo.io that runs the JS.
  • Creates a single loader JS file you can use on your site.

How it works

Visit https://compile.jsgo.io/<path> to compile or re-compile your package. Here's a very simple
hello world
. Just click Compile.

After it's finished, you'll be shown a link to a page that runs the code
on jsgo.io. The compile page will also give you a link to a single JS file on pkg.jsgo.io - this
is the loader JS for your package. Add this in a <script> tag on your site and it will download
all the dependencies and execute your package.

URLs on jsgo.io that start github.com may be abbreviated: github.com/foo/bar will be available
at jsgo.io/foo/bar and also jsgo.io/github.com/foo/bar. Package URLs on pkg.jsgo.io always use
the full path.

Production ready?

The package CDN (everything on pkg.jsgo.io) should be considered relatively production ready - it's
just static JS files in a Google Storage bucket behind a Cloudflare CDN so there's very little that can
go wrong. Additionally, the URL of each file contains a hash of it's contents, ensuring immutability.

The index pages (everything on jsgo.io) should only be used for testing and toy projects. Remember
you're sharing a domain with everyone else, so the browser environment (cookies, local storage etc.)
should be used with caution! For anything important, create your own index page on your site and add
the loader JS (on pkg.jsgo.io) to a <script> tag.

Ths compile server (everything on compile.jsgo.io) should be considered in beta... Please add an issue
if it's having trouble compiling your project.

Demos

The power of aggressive caching is apparent when loading pages which share common packages... The examples
in the ebiten game library are a great demonstration of this:

Index

You can customize the HTML delivered by the jsgo.io page by adding a file named index.jsgo.html to
your package. Use {{ .Script }} as the script src. See todomvc
for an example.

Progress

If a function window.jsgoProgress exists, it will be called repeatedly as packages load. Two parameters
are supplied: count (the number of packages loaded so far) and total (the total number of packages).

The default index page on jsgo.io is to display a simple count / total message in a span. However,
by supplying a custom index.jsgo.html, more complex effects may be created - see the html2vecty
example
for a bootstrap progress bar.

Limitations

If there's any non git repositories (e.g. hg, svn or bzr) in your dependency tree, it will fail. This
is unlikely to change. Workaround: vendor the dependencies and it'll work fine.

How to contact me

If you'd like to chat more about the project, feel free to add an issue,
mention @dave in your PR, email me or post in the #gopherjs channel of the
Gophers Slack. I'm happy to help!

Run locally?

If you'd like to run jsgo locally, take a look at these instructions.

主要指标

概览
名称与所有者dave/jsgo
主编程语言Go
编程语言Go (语言数: 5)
平台
许可证MIT License
所有者活动
创建于2018-01-16 06:49:37
推送于2023-02-24 23:33:05
最后一次提交2020-03-05 21:02:16
发布数2
最新版本名称v0.0.2 (发布于 )
第一版名称v0.0.1 (发布于 )
用户参与
星数271
关注者数16
派生数11
提交数291
已启用问题?
问题数20
打开的问题数7
拉请求数3
打开的拉请求数1
关闭的拉请求数0
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?