rails 里js 在production 只合并不压缩等问题,以及assets pipeline 加载js 在指定页面上
因为刚学rails,试着做了一个小系统操作微信公共帐号,
之后部署的时候遇见了一个问题,整套系统在互联网端访问,非常的慢,而在手机端访问,10s后才会有响应,
打开chrome的调试工具,发现application-(xxxxdigestxxxxxx).js 这个文件有800多k
之后打开这个文件发现,里面包含有未压缩的jquery 注释版,以及重控件 ckeditor 的代码
于是,问题变成了
1. 如何将jquery 脱水压缩
2. 只在需要时候再加载其他重控件 比如 ckeditor 的js (500k)
关于1, 其实是自己犯的一个错误, 因为我在预编译的时候没有带上production的参数 正确的编译指令是
rake assets:precompile RAILS_ENV=production
至于为什么最开始没有这么写? 因为最开始我还是加了这个参数的,但是发现加了的时候终端"卡死"了,于是ctrl+c 停止了执行
后来发现,其实并不是卡死,而是一些重控件的js比较复杂,node.js 还在运算而已,比如ckeditor 在我的本子上,最后执行precompile需要大概3min的时间
关于2,我们都知道application.js 是layouts/application.html.erb 里引用的,之后application.js 默认包含了一句话
//=require tree . 这句话的含义是加目录下所有的js文件
如果我们要做到分别加载js,首先要干掉这句话
之后需要在layouts/application.html.erb 里的header预留一个yield位置加载自己在具体指定页面的js
我是在<%= csrf_meta_tags %> 后面加了个<%= yield :head %>
之后再具体的页面上加载具体的js就简单了,在指定的页面中加载对应的js即可 比如这里
<% content_for :head do%>
<%= javascript_include_tag "ckeditor_load", "data-turbolinks-track" => true %>
<% end %>
当然,你需要在app/assets/javascripts 里写入这个ckeditor_load.js 文件,之后还需要注意的是,需要在config/application.rb 中加入这个precompile 的编译范围
config.assets.precompile += ['admin.js', 'ckeditor_load.js', 'swfObject.js']
最后再rake assets:precompile RAILS_ENV=production
这样,最终可达到js分类进行加载,并且压缩了js,删除了注释等信息,application.js 从最开始的800k,最后到了一般页面的120k左右,比较科学
参考文章
http://guides.rubyonrails.org/asset_pipeline.html
http://chloerei.com/2013/03/10/rails-assets-pipeline-s-value/
这里说个小花絮,我在rei 的博客留言之后,rei几乎就立即回复了,后来觉得博主这个头像好面熟,最后想起来了,这家伙是ruby-china 的第一位会员(http://ruby-china.org/rei),顿时吓尿.
rails 里js 在production 只合并不压缩等问题,以及assets pipeline 加载js 在指定页面上的更多相关文章
- 动态加载js css 插件
简介 动态加载js,css在现在以及将来肯定是很重要的.目前来看前端代码编写的业务量已经远远超过后端编写的.随着对用户体验度逐渐增强,前端业务复杂,加载速度变得很慢很慢.为了解决这个问题,目前出现的两 ...
- 根据配置文件加载js依赖模块(JavaScript面试题)
面试题目 根据下面的配置文件 module=[ {'name':'jquery','src':'/js/lib/jquery-1.8.3.js'}, {'name':'swfobject','src' ...
- 异步加载js文件的方法总结
方法一,jQuery.getScript HTML 代码: 代码如下 复制代码 <button id="go">Run</button><div cl ...
- 兼容的动态加载JS【原】
兼容的动态加载JS 屌丝就是悲剧,五一还得宅家里写程序专研技术. 说起动态加载JS,搞web的肯定不陌生,著名的YUI库就有强大的模块化的动态加载JS机制.在代码量不断庞大的今天,动态加载JS作用还是 ...
- 页面强制重新加载js的办法
1:线上强制重新加载js的办法 js后缀?v1.0 2:开发环境强制重新加载js的办法?now=Date.now() 3:开发环境强制重新加载js的办法F12进入调试页面选择network下单 dis ...
- ASP.NET MVC 4 Optimization的JS/CSS文件动态合并及压缩
JS/CSS文件的打包合并(Bundling)及压缩(Minification)是指将多个JS或CSS文件打包合并成一个文件,并在网站发布之后进行压缩,从而减少HTTP请求次数,提高网络加载速度和页面 ...
- (转)高性能JavaScript:加载和运行(动态加载JS代码)
浏览器是如何加载JS的 当浏览器遇到一个<script>标签时,浏览器首先根据标签src属性下载JavaScript代码,然后运行JavaScript代码,继而继续解析和翻译页面.如果需要 ...
- 动态加载JS函数
一般性的,当我们需要加载js文件的时候都会使用script标签来实现,类似于如下代码: 代码如下: <script type="text/javascript" src=&q ...
- 详谈LABJS按需动态加载js文件
为了提高页面的打开和加载速度,我们经常把JS文件放在页面的尾部,但是有些JS必须放在页面前面,这样就会增加页面的加载时间:于是出现了按需动态加载的概念,这个概念就是当页面需要用到这个JS文件或者CSS ...
随机推荐
- mysql存取blob类型数据
参考网址:http://www.cnblogs.com/jway1101/p/5815658.html 首先是建表语句,需要实现将表建立好. CREATE TABLE `blobtest` ( `pr ...
- 海量推荐系统:mapreduce的方法
1. Motivation 2. MapReduce MapReduce是一种数据密集型并行计算框架. 待处理数据以"块"为单位存储在集群机器文件系统中(HDFS),并以(key, ...
- ChineseLunisolarCalendar 农历日期
#region 农历日期 static ChineseLunisolarCalendar cCalendar = new ChineseLunisolarCalendar(); /// <sum ...
- Vue v-if ToolList
可根据v-if="IsOk",动态判断标签是否展示 <template> <div id="app"> <input type=& ...
- The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).
刚才Insus.NET有尝试改一段代码,是让用户能动态变更网页背景图片的小功能.当Insus.NET去执行铵钮Click事件时,它却出现标题的错误.代码是这样的: 此代码,原本是没有什么问题的,但现在 ...
- Linux性能指标解释+Oracle性能指标解释
Linux性能指标解释 类别 计数器名称 计数器描述 业界同行认可的资源阀值 memory Free(KB) 可用物理内存数 swap-in/out =0 Swap(KB) 已使用的虚拟内存数.在Li ...
- NSPoint 位置
前言 结构体,这个结构体用来表示事物的一个坐标点. typedef CGPoint NSPoint; struct CGPoint { CGFloat x; CGFloat y; }; typedef ...
- 高产的母猪之 python __init__全解
python __init__.py python 识别是不是一个模块的标准是目录下有无 __init__.py 模糊导入 模糊导入中的*中的模块是由__all__来定义的,__init__.py的 ...
- 51nod1445(最短路)
题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1445 题意: 中文题诶~ 思路: 可以将每种颜色看作一个节点 ...
- codevs1068(dp)
题目链接: http://codevs.cn/problem/1068/ 题意: 中文题诶~ 思路: dp 用 dp[i][j][k][l] 表示取 i 个 1, j 个 2, k 个 3, l 个 ...