摘要:原文首发代码压缩如果你用的是服务器,请修改配置文件其他类似在里加入开启或者关闭模块,这里使用表示启动设置允许压缩的页面最小字节数默认值是,不管页面多大都压缩设置系统获取几个单位的缓存用于存储的压缩结果数据流代表以为单位,按照原始数据大
</>复制代码
原文首发: https://shuirong.github.io/
1.代码压缩(gzip)
如果你用的是nginx服务器,请修改配置文件(其他web server 类似):
sudo nano /etc/nginx/nginx.conf
在Gzip Settings里加入:
</>复制代码
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 5;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php;
gzip
开启或者关闭 gzip 模块,这里使用 on 表示启动
gzip_min_length
设置允许压缩的页面最小字节数.默认值是0,不管页面多大都压缩.
gzip_buffers
设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流.4 16k 代表以 16k 为单位,按照原始数据大小以 16k 为单位的4倍申请内存
gzip_comp_level
压缩比,压缩比1最小处理速度最快,压缩比9最大但处理最慢(传输快但比较消耗cpu)
gzip_types
匹配MIME类型进行压缩,(无论是否指定)"text/html" 类型总是会被压缩
</>复制代码
我这样配置,把首页一个需要下载的文件由716KB压缩到了246KB.优化比66%.
如果你没有开启服务器端的gzip,也可以开启前后端代码的压缩
如果你后端用的是Express.js框架来提供Web服务,那么可以使用压缩中间件进行gzip压缩.
</>复制代码
var compression = require("compression");
var express = require("express");
var app = express();
app.use(compression());
如果你前端是用vue-cli生成的项目,那么在Webpack配置文件(生产环境)中已经开启了代码的压缩.
2. 外部文件按需引入||不用外部文件,自己造轮子在项目中使用Element的话,按需引入:
首先安装 babel-plugin-component:
npm install babel-plugin-component -D
它让我们可以只引入需要的组件,以达到减小项目体积的目的.
PS: 如果这时报错:
</>复制代码
Error: post install error, please remove node_modules before retry
这是cnpm的锅.原因不详.解决办法是换用npm安装此模块.(我试过移除node_modules文件,报错依旧)
如果你用了Ajax相关的库,比如vue-resource/axios的话
去掉它,自己实现一个Ajax库吧.
比如我的项目中只涉及了get,post,那么vue-resource/axios对我来说就很没必要了.
所以我就封装个库(支持Promise,不支持IE)在Vue中当作插件使用:
</>复制代码
/* xhr.js */
class XHR {
get(url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && (xhr.status < 300 || xhr.status === 304)) {
if (xhr.responseText) {
resolve(JSON.parse(xhr.responseText));
} else {
resolve(xhr.responseText);
}
} else {
reject(`XHR unsuccessful:${xhr.status}`);
}
}
};
xhr.open("get", url, true);
xhr.setRequestHeader("content-type", "application/json");
xhr.send(null);
});
}
post(url, data) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && (xhr.status < 300 || xhr.status === 304)) {
resolve(JSON.parse(xhr.responseText));
} else {
reject(`XHR unsuccessful:${xhr.status}`);
}
}
};
xhr.open("post", url, true);
xhr.setRequestHeader("content-type", "application/json");
xhr.send(JSON.stringify(data));
});
}
}
/* Vue插件要求提供install方法:https://cn.vuejs.org/v2/guide/plugins.html */
XHR.install = (Vue) => {
Vue.prototype.$get = new XHR().get;
Vue.prototype.$post = new XHR().post;
};
export default XHR;
</>复制代码
这种方法一般能缩小文件几十KB.比如vue-resource有35KB,我的这个xhr.js只有1.9KB.
3.代码分块/Code Splitting
顾名思义,就是讲代码分成块,按需加载.这样,如果首屏不需要的块,就不用加载了.
对于大型项目可能更有用,因为在我的这个项目中首页需要的文件和其他页面需要的基本一样,所以代码分块对我这个项目而言,就没必要了.
4. 路由组件懒加载当打包构建应用时,Javascript 包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了
结合 Vue 的 异步组件 和 Webpack 的 code splitting feature,可以轻松实现路由组件的懒加载.
我们要做的就是把路由对应的组件定义成异步组件:
</>复制代码
const Foo = resolve => {
/* require.ensure 是 Webpack 的特殊语法,用来设置 code-split point
(代码分块)*/
require.ensure(["./Foo.vue"], () => {
resolve(require("./Foo.vue"))
})
}
/* 另一种写法 */
const Foo = resolve => require(["./Foo.vue"], resolve);
不需要改变任何路由配置,跟之前一样使用 Foo:
</>复制代码
const router = new VueRouter({
routes: [
{ path: "/foo", component: Foo }
]
})
4. Webpack2 Tree-shaking
Tree-shaking 用来消除没有用到的代码.
5. 减少XHR中不必要的数据.</>复制代码
个人小项目一般用不到tree-shaking.因为你不会写没用到的代码.规模很大的项目或许可以尝试使用它.
比如我的项目中,首页只需要博客Title,id和Tags.Time和Content不需要了,况且Content一般还很大(一般一篇10KB左右).
6. SSR(Server Side Render/服务端渲染)这个有点难搞.但效果貌似挺不错.我之前在Vue文档中简单看了一边,打算以后有需求了再搞不迟.
7. 其他诸如图片懒加载就不赘述了,前端开发者应该有的常识.文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/86991.html
摘要:另外,单页应用因为数据前置到了前端,不利于搜索引擎的抓取。所以我们需要对自己的单页应用进行一些优化。 前言 最近秋招之余空出时间来按自己的兴趣动手做了一个项目,一个基于vue-cli3.0, vue,typescript的移动端pwa,现在趁热打铁,将这个项目从开发到部署整个过程记录下来,并将从这个项目中学习到的东西分享出来,如果大家有什么意见或补充也可以在评论区提出。先介绍一下这个项...
摘要:公司的招聘要求都提到了至少熟悉其中一种前端框架,有前端工程化与模块化开发实践经验相关字眼。我们主要从端公众号移动端小程序三大平台进行前端的技术选型,并来说说选其技术的几大优势。技术的优势互联网前端大潮后,前端出现了大框架,分别是与。 1、技术选型的背景前端技术发展日新月异,互联网上出现的新型框架也比较多,如何让新招聘的人员...
摘要:第一次写项目,但是在实践的过程发现了很多坑,这篇文章主要讲述的是项目首屏加载过慢的大坑。建议使用,相对来说算是比较快的了。在官方文档中有相关实现的代码,很简单。毕竟首屏加载,优化都得靠了。 第一次写 vue spa项目,但是在实践的过程发现了很多坑,这篇文章主要讲述的是spa项目首屏加载过慢的大坑。在webpack的配置中,在打包的过程中,会将所有的库都打包到vendor.js中,所以...
摘要:所以前端使用压缩是没有起作用的。影响,选项显示警告在删除没有用到的代码时不输出警告删除所有的语句还可以兼容浏览器内嵌定义了但是只用到一次的变量提取出出现多次但是没有定义成变量去引用的静态值此方法有待实践,留待下次分享 单页应用会随着项目越大,导致首屏加载速度很慢!!!以下给出在下知道的几种优化方案 使用CDN资源,减小服务器带宽压力 路由懒加载 将一些静态js css放到其他地方(如...
阅读 1896·2021-11-22 15:25
阅读 1256·2021-11-19 09:40
阅读 1860·2021-09-27 13:57
阅读 992·2021-09-22 15:10
阅读 976·2021-08-16 11:01
阅读 2974·2021-07-23 17:51
阅读 772·2019-08-30 15:55
阅读 823·2019-08-30 13:58