繁体   English   中英

PHP中的打包,缓存,JS和CSS,区分开发和生产环境

[英]Packing, caching, JS and CSS in PHP that differentiate between development and production environment

我正在努力使开发变得简单并且在生产中具有高度优化的输出。

我想要做的目标是:

  • 快速制作生产页面! 我希望Google Page SpeedYSlow能够获得最佳分数。 这意味着:
    1. 组合并压缩 JS文件和CSS, 并将组定位在HTML中的正确位置(页面的底部或顶部)。 对于.js谷歌关闭似乎是最好的选择。
    2. .JS和.CSS是智能缓存的,但请确保在更新.JS或CSS组件时重新加载它们。 301文件未更改等
    3. 缓存类型 :我认为磁盘上的缓存很好。 如果它们显着提高速度,请考虑APC和Memcache或Redis。
    4. 能够在必要时指定和使用.JS的延迟加载 ,或者至少不阻止页面呈现。
    5. (可选)也压缩HTML。
  • 简化网站开发
    1. 如果要包含.js或.css并在生产环境中仅压缩它们,请在.php文件中使用short命令
      • 使用类似pack_js(['first.js','second.js''third.js'])pack_css(['first.less','second.less''third.css'],true的语法)
      • 很容易配置开发或生产环境。 也许只是调用SetDebug(true或false) 默认生产
      • 轻松设置缓存文件夹源文件夹
    2. 使用LESS使CSS开发变得更少。 在生产中自动编译CSS中的LESS文件,但在开发中使用LESS.js ,这样每次在开发中更改.less文件时,它都会在服务器上更新。
    3. (可选)在开发中,它包括一个JS和一个LESS控制台,类似于https://www.squarefree.com/bookmarklets/webdevel.html上的shell

注意:如果Apachee模块和.htaccess文件显着加快了进程,则可以使用它们。 但它应该能够快速设置它们,理想情况下只需要一个设置命令。

有没有做到这一点? 或者什么是最好的资源开始?

我更喜欢一个由PHP脚本(最终几个.php文件,.htaccess和压缩可执行文件)组成的解决方案,它使用Google Closure Compiler压缩.JS并压缩/编译CSS / LESS文件,删除无用的注释和空格。 可以在生产服务器上使用特殊cookie来输出开发版本。

我想拥有:

一个像以下那样可用的php函数: pack_js(['first.js','second.js','third.js']) ,它们写成:

在开发服务器上:

<script type="text/javascript" src="static/js/first.js"></script>
<script type="text/javascript" src="static/js/second.js"></script>
<script type="text/javascript" src="static/js/third.js"></script>

在生产服务器上(如果不存在特殊cookie):

<script type="text/javascript" src="cache/12a42323bfe339ea9w.js"></script>

另一个函数: pack_css(['first.less','second.less','third.css'],true)写下:

在开发服务器上:

<link rel="stylesheet/less" href="/static/css/first.less" type="text/css" />
<link rel="stylesheet/less" href="/static/css/second.less" type="text/css" />
<link href="/static/css/third.css" type="text/css" />
<script src="http://lesscss.googlecode.com/files/less-1.0.21.min.js"></script>

<script type="text/javascript" charset="utf-8">
    less.env = "development";
    less.watch();
</script>

在生产服务器上(如果不存在特殊cookie):

<link href="/cache/46537a8b8e876f7a8e7.css" type="text/css" />

第二个参数指定是否应在开发服务器上输出less.js

显然12a42323bfe339ea9w.js和46537a8b8e876f7a8e7.css是脚本的优化,打包和编译版本。 此解决方案应该能够检测源文件何时更改并重新编译脚本以进行生产。 它应该可以配置为关于脚本的位置和缓存类型(磁盘很好)。 理想情况下,pack_js应该可以选择在生产中对js进行延迟加载。

每个建议都受到欢迎。

仍在努力探索利用现有资源的最佳解决方案。

到目前为止CSS-JS-BoosterTurbine看起来是最好的起点: http//github.com/Schepp/CSS-JS-Boosterhttp://turbinecss.org/

其他JS / CSS Combiners解决方案和文章

JS压缩和缓存的资源:

较少的编译器/教程/工具:

在部署时选项:

为什么不使用项目构建系统将应用程序部署到生产服务器上呢? 对于PHP,您可能会喜欢Phing ,因为它允许您在PHP中编写额外的插件,您可以在部署时执行。 你可能想要考虑的其他选择是AntCapistrano (还有很多其他的),但这些需要其他语言的知识(如果你真的想要,你可以从他们那里启动php解析器...... )。

好问题!

我使用过具有类似要求的流程,但我们采取了一些不同的方法。 我意识到它可能并不完全是你所追求的,但仍会提出一些建议:

  1. 制作运输过程中的压缩/编译部分。(您可能已经这样做了,但从上面不清楚)。
  2. 在开发服务器上压缩/编译它。 它可能是调试/测试的麻烦,但您希望能够确保生产版本和测试版本尽可能相似。 如果你有多个开发阶段的奢侈品,那么你可以压缩其中一个。
  3. 只有在通过某种质量扫描时才进行压缩/编译(例如jslint
  4. 不要组合模块 - 将它们分开。 您将获得的性能优势可以忽略不计,几乎毫无意义。
  5. 不要更改HTML,只需更改依赖模块内容即可。

我意识到它与你的意图有点不同,但根据我的经验,它会导致更强大的开发促销模型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM