使用compojure路由/资源和环路,资源加载时间非常慢

时间:2014-11-15 03:48:34

标签: clojure leiningen clojurescript ring compojure

免责声明:我对clojure很新。

我突然遇到一个问题,加载我的clojurescript应用程序需要15秒才能加载所有的库代码。以同样的方式设置的第二个项目没有这些问题。

enter image description here

CLJS build:

  :cljsbuild {:builds [{:id "dev"
                        :source-paths ["src/cljs"]
                        :compiler {:output-to "resources/public/app/js/app.js"
                                   :output-dir "resources/public/app/js/out"
                                   :optimizations :none
                                   :source-map true}}]}

handler.clj

  (GET  "/" [] (resource-response "index.html" {:root "public/app"}))
  (route/resources "/" {:root "public/app"})
  (route/not-found "Not Found"))

我的第一个想法是,它每次访问页面时都以某种方式重新编译所有内容,但未更改的库的文件时间戳没有改变。

第二个想法是,这可能是因为我的浏览器中存在缓存查杀,但即使在通过开发人员工具允许缓存之后,文件加载时间仍然是蜗牛。

第三个想法是两个项目之间的版本差异,但即使将第二个项目升级到最新版本,或者将第一个项目降级到以前的版本,问题仍然存在。

监控时,我还注意到java进程在页面访问时跳转到350%CPU。

我试图恢复我所做的所有更改,但无法找出问题所在。作为clojure和clojurescript的新手,我没有想法。我显然不能在每次加载页面时等待15秒,只是为了在控制台中看到一条消息。

/编辑:

Project.clj

(defproject picky "0.1.0-SNAPSHOT"
  :description "project"
  :url "http://example.com/FIXME"
  :source-paths ["src/clj"]
  :dependencies [[org.clojure/clojure "1.6.0"]
                 [org.clojure/tools.reader "0.8.2"]
                 [org.clojure/clojurescript "0.0-2371"]
                 [org.clojure/core.async "0.1.346.0-17112a-alpha"]
                 [ring/ring-core "1.3.1"]
                 [ring/ring-json "0.3.1"]
                 [compojure "1.2.1"]
                 [korma "0.4.0"]
                 [org.postgresql/postgresql "9.2-1002-jdbc4"]
                 [com.cemerick/friend "0.2.1"]
                 [lobos "1.0.0-beta3"]
                 [cljs-http "0.1.20"]
                 [secretary "1.2.1"]
                 [om "0.3.6"]
                 [com.facebook/react "0.8.0.1"]
                 [hiccup "1.0.5"]]
  :plugins [[lein-cljsbuild "1.0.3"]
            [lein-ring "0.8.13"]
            [lein-pdo "0.1.1"]]
  :aliases  {"up"  ["pdo" "cljsbuild" "auto" "dev," "ring" "server-headless"]}
  :ring {:handler myapp.handler/app}
  :profiles
  {:dev {:dependencies [[javax.servlet/servlet-api "2.5"]
                        [ring-mock "0.1.5"]]}}
  :cljsbuild {:builds [{:id "dev"
                        :source-paths ["src/cljs"]
                        :compiler {:output-to "resources/public/js/app.js"
                                   :output-dir "resources/public/js/out"
                                   :optimizations :none
                                   :source-map true}}]}

中间件是wrap-json-bodywrap-json-response,虽然我尝试过已经禁用了两者。

1 个答案:

答案 0 :(得分:2)

我发现了这种巨大性能损失的罪魁祸首。经过大量的调试后,我发现项目1和项目2之间的唯一区别是资源文件夹。

项目1包括整个前端项目。很多文件都是通过bower,scss,编译过的css,编译过的cljs等等。良好的前端开发所需的一切。总计 10506 个文件。

Project 2是一个测试项目,包括一些HTML,javascript和已编译的cljs文件。 142 文件总计。

为了进行测试,我将一些文件移出了资源文件夹和ta-daa,文件加载时间缩短到几毫秒。将文件移回资源文件夹,性能得到了提升。

我将在compojure项目中提交错误报告。可能是他们还没有意识到的东西。