2

我试图了解 ClojureScript 的生命周期及其在 repl 中的评估。

据我了解,当我使用以下命令开始 repl 时lein trampoline cljsbuild repl-listen,然后当我使用以下命令收听时(repl/connect "http://localhost:9000/repl")-

  1. 它创建一个侦听端口 9000 的 TCP 服务器。
  2. 浏览器建立某种轮询,它正在轮询任何更改。
  3. 当我在 repl 中执行任何代码时,这会更改编译*.js文件。
  4. 然后将此 *.js 文件提供给浏览器。
  5. 浏览器将其当前的 *.js 文件替换为新文件。
  6. 因此,由于在 repl 中执行的代码而导致的更改会显示在浏览器中。

我正在尝试更好地验证和理解这一点。如果有人能详细说明这一点或指向我更好地解释它的链接,将不胜感激。

4

1 回答 1

4

严格来说,javascript 的执行环境不必是浏览器,尽管“大多数”用途是。

对于基于浏览器的执行环境:

  1. 在端口 9000 上创建的 HTTP 服务器
  2. 浏览器使用HTTP Long polling连接服务器,建立执行环境。(这是一个 HTTPGEThttp://server:9000/repl
  3. 在 REPL 中执行代码时,clojurescript 被编译为 javascript,并且 javascript 在 HTTP 长轮询中作为“响应”(见下文)发送。(请注意,这不是将 js 文件“提供给浏览器”,而只是相关的表单)
  4. javascript 表单在浏览器中进行评估。
  5. 浏览器中的 javascript 环境现在是最新的。

遵循这一点的最简单方法是使用 google chrome 开发人员工具中的网络监视器之类的东西来监视 http 流量。

注意:在 HTTP 长轮询设置中,请求/响应之间存在无限混淆,这可能会有所帮助:

  [REPL]    -> [browser] travels via HTTP Response
  [browser] -> [REPL]    travels via HTTP Request.
于 2013-03-06T21:45:01.807 回答