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 ...
随机推荐
- 树莓派(Raspberry Pi 3) - 系统烧录及xshell连接
树莓派(Raspberry pi)是一块集成度极高的ARM开发板,不仅包含了HDMI,RCA,CSI,HDMI,GPIO等端口,还支持蓝牙以及无线通信.由于 Raspberry Pi 几乎是为 Lin ...
- 校对双层PDF中的隐藏文本
作者:马健邮箱:stronghorse_mj@hotmail.com发布:2012.06.11 目录一.背景二.能够校对的PDF需要满足的条件三.校对工具的选择四.校对过程五.延伸讨论 事先声明:本文 ...
- Python-OpenCV中的cv2.threshold
目录 cv2.threshold() 主要记录Python-OpenCV中的cv2,threshold()方法:官方文档 cv2.threshold() def threshold(src, th ...
- SQL Server 附加数据库 错误5210
前言 那天在弄机房的时候,附加数据库总是附加不上,然而将附加数据库文件放到优盘里,就可以附加成功.我也不知道为什么了,但是这次还是别将就了.于是乎,上网查了查原来是权限不够啊.这可怎么办,见下面三种方 ...
- 一些意想不到的小bug。
一,当if的时候,很容易忘记相对的else,从而出现bug,要将背面消息考虑全面. 二,多个元素在同一行布局的时候,要考虑文字的换行还是省略号代替. 例如:左边一个文字,宽度不固定,右边一个图形,宽度 ...
- Unity---UGUI入门基础---更新中
目录 1.UGUI介绍 2.UGUI基础 2.1 Canvas---画布 2.2 Text控件 2.3 Image控件 2.4 RawImage控件 2.5 Button控件 2.6 Toggle控件 ...
- P3613 睡觉困难综合征 LCT+贪心+位运算
\(\color{#0066ff}{ 题目描述 }\) 由乃这个问题越想越迷糊,已经达到了废寝忘食的地步.结果她发现--晚上睡不着了!只能把自己的一个神经元(我们可以抽象成一个树形结构)拿出来,交给D ...
- P2866 [USACO06NOV]糟糕的一天Bad Hair Day
题意:给你一个序列,问将序列倒过来后,对于每个点,在再碰到第一个比它大的点之前,有多少比它小的? 求出比它小的个数的和 样例: 610374122 output: 5 倒序后:2 12 4 ...
- ghj1222的代码规范
基本上和notepad++的要求一样. 不定期更新. 1.左大括号换行: int main() { return 0; } 可能有些同志(比如大佬cjh)和我的做法不一样 当一个函数很短的时候可以整个 ...
- 商品录入功能v1.0【持续优化中...】
# 录入商品 def goods_record(): print("欢迎使用铜锣辉的购物商城[商品管理][录入商品]".center(30, "*")) whi ...