Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature request/idea - server compute... #16

Open
CobusT opened this issue Feb 17, 2021 · 2 comments
Open

Feature request/idea - server compute... #16

CobusT opened this issue Feb 17, 2021 · 2 comments

Comments

@CobusT
Copy link

CobusT commented Feb 17, 2021

I am now very curious about whether you can imagine using this to offload computing to a server instead of your own computer... since it is headless Chrome, conceivably, this could be a way to have a notebook run remotely...
Just a thought.

@asg017
Copy link
Owner

asg017 commented Feb 17, 2021

lol yeah, I was actually just working on some flags for this. Puppeteer can connect to remote headless browsers using a browserURL or browserWSEndpoint. If you're using the observable-prerender Node APIs, you can do something like:

const browser = await puppteer.connect({
  browserWSEndpoint: "ws://127.0.0.1:64556/devtools/browser/ca689dca-ac6d7sc6-aucy8ac"
})
const notebook = await load("@d3/bar-chart", "chart", {browser})

where the browserWSEndpoint can be found from a remote puppeteer instance with console.log(browser.wsEndpoint()). Now, all the operations will occur on the remote instance rather than your local computer, which should be much faster than launching/tearing down your own instance every time.

I'll be adding some new CLI flags (--browser-wsendpoint and others) that will make this much easier to do w/ the observable-prerender CLI

@asg017
Copy link
Owner

asg017 commented Feb 18, 2021

kk so v0.4.2 now has this new flag, you can upgrade with

npm i -g @alex.garcia/observable-prerender@v0.4.1

I did a quick benchmark with hyperfine, results are below. #1 remotely connects a headless browser, #2 remotely connects to a non-headless browser, and #3 launches a new browser everytime. --browser-wsendpoint is much faster, especially on headless (380ms) vs non-headless (830ms), but both are much faster than launching a new instance every time (1.128s).

Benchmark #1: ./bin/observable-prerender @d3/pie-chart chart -o /tmp/chart --browser-wsendpoint ws://127.0.0.1:63978/devtools/browser/ec404914-74ee-4833-b1da-61fa220be226
  Time (mean ± σ):     386.9 ms ± 295.9 ms    [User: 140.6 ms, System: 22.8 ms]
  Range (min … max):   273.6 ms … 1227.0 ms    10 runs
 
 
Benchmark #2: ./bin/observable-prerender @d3/pie-chart chart -o /tmp/chart --browser-wsendpoint ws://127.0.0.1:63032/devtools/browser/d9eeb9d8-342a-4e5c-91b5-8467cb549455
  Time (mean ± σ):     836.1 ms ±  73.4 ms    [User: 152.7 ms, System: 26.9 ms]
  Range (min … max):   778.1 ms … 976.9 ms    10 runs
 
 
Benchmark #3: time ./bin/observable-prerender @d3/pie-chart chart -o /tmp/chart
  Time (mean ± σ):      1.128 s ±  0.064 s    [User: 217.0 ms, System: 59.2 ms]
  Range (min … max):    1.068 s …  1.287 s    10 runs
 
Summary
  './bin/observable-prerender @d3/pie-chart chart -o /tmp/chart --browser-wsendpoint ws://127.0.0.1:63978/devtools/browser/ec404914-74ee-4833-b1da-61fa220be226' ran
    2.16 ± 1.66 times faster than './bin/observable-prerender @d3/pie-chart chart -o /tmp/chart --browser-wsendpoint ws://127.0.0.1:63032/devtools/browser/d9eeb9d8-342a-4e5c-91b5-8467cb549455'
    2.91 ± 2.24 times faster than 'time ./bin/observable-prerender @d3/pie-chart chart -o /tmp/chart'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants