撇号CMS的性能工程

时间:2016-11-04 22:23:38

标签: performance caching apostrophe-cms

因此,在12小时轮班三周后,我几乎完成了使用撇号建立知识库系统。现在是加速前端事物的任务。我的问题是:

  1. 如何添加expires标头:Express内置了一个名为static的轻软件,我可以在index.js文件下正常实现吗?
  2. 缩小JavaScript& CSS:http://apostrophecms.org/docs/modules/apostrophe-assets/我看到撇号有内置的东西,但不清楚如何启用它?我还需要将资产放在特定文件夹中才能使用吗?现在我在lib / modules / apostrophe-pages / public / js下有所有JS文件,在public / css下有CSS。
  3. 在服务器上启用GZIP:没有提到任何内容但是快递确实有gzip模块我可以在lib / modules / apostrophe-express / index.js下实现吗?
  4. 非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

我是P' unk Avenue的Apostrophe的首席开发人员。

听起来你发现我们的部署HOWTO最近添加了关于缩小的材料,所以你自己整理了那部分。这很好。

至于服务器上的expires头和gzip,虽然您可以直接在节点中执行此操作,但我们不会!通常,我们从不直接与最终用户进行节点对话。相反,我们使用nginx作为反向代理,它为我们提供了负载平衡,并允许我们直接提供静态文件。 nginx,用C / C ++编写,速度更快。此外,gzip和TLS的实现经受了很大的考验。不需要让javascript做他们不擅长的事情。

我们通常使用mechanic来配置nginx,我们创建它是为了使用一些命令管理nginx而不是手动编写配置文件。我们的标准配方包括gzip和expires头。

但是,这是它创建的nginx配置文件的带注释版本。您将看到它涵盖了静态文件的负载平衡,gzip和更长的到期时间。

# load balance across 4 instances of apostrophe listening on different ports
upstream upstream-example {
  server localhost:3000;
  server localhost:3001;
  server localhost:3002;
  server localhost:3003;
}

server {
  # gzip transfer encoding
  gzip on;
  gzip_types text/css text/javascript image/svg+xml
    application/vnd.ms-fontobject application/x-font-ttf
    application/x-javascript application/javascript;

  listen *:80;

  server_name www.example.com example.com;

  client_max_body_size 32M;

  access_log /var/log/nginx/example.access.log;
  error_log /var/log/nginx/example.error.log;

   # reverse proxy: pass requests to nodejs backends        
  location @proxy-example-80 {
    proxy_pass http://upstream-example;

    proxy_next_upstream error timeout invalid_header http_500 http_502
  http_503 http_504;
    proxy_redirect off;
    proxy_buffering off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }

  # Deliver static files directly if they exist matching the URL,
  # if not proxy to node
  location / {
    root /opt/stagecoach/apps/example/current/public/;
    try_files $uri @proxy-example-80;
    # Expires header: 7-day lifetime for static files
    expires 7d;
  }
}