整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

PostCSS-css必备

PostCSS-css必备

ostcss越来越重要了,经常可以看到它的身影,比如面试,论坛。本篇文章是小编参考多方资料以及官网总结出来的,不喜勿喷,喜欢多多支持,谢谢!

另外 React Redux ES6 Webpack...... 更多干货在个人主页中查看

什么是postcss

postcss 一种对css编译的工具,类似babel对js的处理,常见的功能如:

1 . 使用下一代css语法

2 . 自动补全浏览器前缀

3 . 自动把px代为转换成rem(rem不熟悉的,点这)

4 . css 代码压缩等等

postcss 只是一个工具,本身不会对css一顿操作,它通过插件实现功能,autoprefixer 就是其一。

与 less sass 的区别

less sass 是预处理器,用来支持扩充css语法。

postcss 既不是 预处理器也不是 后处理器,其功能比较广泛,而且重要的一点是,postcss可以和less/sass结合使用

关于取舍

虽然可以结合less/sass使用,但是它们还是有很多重复功能,用其中一个基本就 ok 了。

以下是个人的总结:

  • postcss 鼓励开发者使用规范的CSS原生语法编写源代码,支持未来的css语法,就像babel支持ES6。

  • less、sass 扩展了原生的东西,它把css作为一个子集,但这不好保持向后兼容。

总体来说区别不大,看个人喜好吧

如何使用

这里只说在webpack里集成使用,首先需要 loader

1 . 安装

npm install postcss-loader –save-dev

2 . webpack配置

一般与其他loader配合使用,下面*标部分才是postcss用到的

配合时注意loader的顺序(从下面开始加载)

3 . postcss配置

项目根目录新建 postcss.config.js文件,里面配置一些插件

注:也可以在webpack中配置

常用的postcss插件

1 . Autoprefixer

前缀补全,全自动的,无需多说

安装:

cnpm install Autoprefixer --save-dev

2 . postcss-cssnext

使用下个版本的css语法【关于语法另一篇文章会单独讲】

安装:

cnpm install postcss-cssnext --save-dev

3 . postcss-pxtorem

把px转换成rem

安装:

cnpm install postcss-pxtorem --save-dev

配置项:

特殊技巧:不转换成rem

px检测区分大小写,也就是说Px/PX/pX不会被转换,可以用这个方式避免转换成rem

下篇:cssnext,下一代css

【关注一下不迷路】

html css html css javascript html javascript css javascript css

比于早些年前后端代码紧密耦合、后端工程师还得写前端代码的时代,如今已发展到前后端分离,这种开发方式大大提升了前后端项目的可维护性与开发效率,让前后端工程师关注于自己的主业。然而在带来便利的同时,也带来了一些弊端,比如首屏渲染时间(FCP)因为首屏需要请求更多内容,比原来多了更多HTTP的往返时间(RTT),这造成了白屏,如果白屏时间过长,用户体验会大打折扣,如果用户网速差,则FCP会更长。

1. FCP优化

在 Google 提出的以用户为中心的四个页面性能衡量指标中,FP/FCP可能是开发者们最熟悉的了

为了优化首屏渲染时间这个指标,减少白屏时间,前端仔们想了很多办法:

  • 加速或减少HTTP请求损耗:使用CDN加载公用库,使用强缓存和协商缓存,使用域名收敛,小图片使用Base64代替,使用Get请求代替Post请求,设置 Access-Control-Max-Age 减少预检请求,页面内跳转其他域名或请求其他域名的资源时使用浏览器prefetch预解析等;
  • 延迟加载:非重要的库、非首屏图片延迟加载,SPA的组件懒加载等;
  • 减少请求内容的体积:开启服务器Gzip压缩,JS、CSS文件压缩合并,减少cookies大小,SSR直接输出渲染后的HTML等;
  • 浏览器渲染原理:优化关键渲染路径,尽可能减少阻塞渲染的JS、CSS;
  • 优化用户等待体验:白屏使用加载进度条、菊花图、骨架屏代替等;

这里要介绍的就是优化用户等待体验的骨架屏,它可以被视为是原来加载菊花图的一种升级版,结合传统的首屏优化方法对应用进行优化可以达到不错的效果。

2. 骨架屏

骨架屏可以理解为是当数据还未加载进来前,页面的一个空白版本,一个简单的关键渲染路径。可以看一下下面Facebook的骨架屏实现,可以看到在页面完全渲染完成之前,用户会看到一个样式简单,描绘了当前页面的大致框架的骨架屏页面,然后骨架屏中各个占位部分被实际资源完全替换,这个过程中用户会觉得内容正在逐渐加载即将呈现,降低了用户的焦躁情绪,使得加载过程主观上变得流畅。

可以看一下下面的示例图,第一个为骨架屏,第二个为菊花图,第三个为无优化,可以看到相比于传统的菊花图会在感官上觉得内容出现的流畅而不突兀,体验更加优良。

如今这项技术已经在Facebook、Google、支付宝、饿了么、简书、新浪微博、知乎、美团、领英等公司的产品中被广泛的使用。在论坛和社区也都有不少文章讨论骨架屏的实现和使用场景等。

3. 生成骨架屏的方法

生成骨架屏的方式主要有:

  1. 手写HTML、CSS的方式为目标页定制骨架屏 做法可以参考<Vue页面骨架屏注入实践>,主要思路就是使用 vue-server-renderer 这个本来用于服务端渲染的插件,用来把我们写的.vue文件处理为HTML,插入到页面模板的挂载点中,完成骨架屏的注入。这种方式不甚文明,如果页面样式改变了,还得改一遍骨架屏,增加了维护成本。 骨架屏的样式实现参考 CodePen
  2. 使用图片作为骨架屏; 简单暴力,让UI同学花点功夫吧哈哈;小米商城的移动端页面采用的就是这个方法,它是使用了一个Base64的图片来作为骨架屏。
  3. 自动生成并自动插入静态骨架屏 这种方法跟第一种方法类似,不过是自动生成骨架屏,可以关注下饿了么开源的插件 page-skeleton-webpack-plugin ,它根据项目中不同的路由页面生成相应的骨架屏页面,并将骨架屏页面通过 webpack 打包到对应的静态路由页面中,不过要注意的是这个插件目前只支持history方式的路由,不支持hash方式,且目前只支持首页的骨架屏,并没有组件级的局部骨架屏实现,作者说以后会有计划实现(issue9)。

另外还有个插件 vue-skeleton-webpack-plugin,它将插入骨架屏的方式由手动改为自动,原理在构建时使用 Vue 预渲染功能,将骨架屏组件的渲染结果 HTML 片段插入 HTML 页面模版的挂载点中,将样式内联到 head 标签中。这个插件可以给单页面的不同路由设置不同的骨架屏,也可以给多页面设置,同时为了开发时调试方便,会将骨架屏作为路由写入router中,可谓是相当体贴了。

vue-skeleton-webpack-plugin的具体使用参考 vue-style-codebase,主要关注build目录的几个文件,线上Demo 在Chrome的DevTools中把network的网速调为Gast 3G / Slow 3G就能看到效果了~


链接文章:

https://juejin.im/post/5b79a2786fb9a01a18267362

聊聊图片预加载:提升用户体验与性能的秘密武器

**引言:**

在Web前端开发中,图片资源的加载速度直接影响着用户体验和页面性能。尤其是在涉及到大量图片展示的网站或应用中,图片预加载作为一种优化手段显得尤为重要。本文将详细介绍图片预加载的原理、应用场景、实现方法以及相关注意事项,并通过具体的HTML+JS代码实例,让你深入了解如何运用预加载技术改善用户的浏览体验。

---

### **一、什么是图片预加载?**

**标题:未雨绸缪,提前加载的背后逻辑**

图片预加载是指在用户实际查看图片之前,预先将图片资源加载到浏览器缓存中。这样当用户浏览到对应位置时,图片已经处于可用状态,从而避免了图片加载导致的页面空白或延迟现象,显著提升了页面的流畅性和整体性能。

---

### **二、图片预加载的重要性**

**标题:瞬间加载,用户体验的飞跃**

1. **更快的视觉呈现**:预加载能够确保图片在用户视线到达前就已经准备好,减少用户等待图片加载的时间,提供即视即所得的浏览体验。

2. **优化页面滚动流畅性**:对于长页面和图片瀑布流等场景,预加载能够消除滚屏时的图片加载滞后问题,确保页面滚动过程平滑无阻。

3. **降低用户跳出率**:快速加载的内容能够增加用户留存,减少因等待时间过长而导致的用户流失。

---

### **三、图片预加载的实现方法**

**标题:实战演练,手把手教你实现预加载**

1. **HTML `<link rel="prefetch">` 方式**

```html

<link rel="prefetch" href="image.jpg">

```

`rel="prefetch"` 属性告诉浏览器在闲置时预先下载指定资源,适用于浏览器支持的情况下对将来可能访问的资源进行预加载。

2. **JavaScript 实现预加载**

```javascript

// 基础图片预加载函数

function preloadImages(urls) {

urls.forEach(function(url) {

var img=new Image();

img.src=url;

});

}

// 使用预加载函数

var imageUrls=['image1.jpg', 'image2.jpg'];

preloadImages(imageUrls);

```

上述JavaScript代码中,我们通过创建新的`Image`对象并设置其`src`属性为待加载图片URL的方式实现预加载。当浏览器解析到这一行代码时,就会立即发送请求加载图片资源。

3. **更进阶的预加载库(如lozad.js)**

```html

<!-- 引入lozad.js库 -->

<script src="https://cdn.jsdelivr.net/npm/lozad/dist/lozad.min.js"></script>

<!-- 使用lozad.js进行懒加载 -->

<img

data-src="image.jpg"

class="lozad"

alt="Example Image"

/>

```

Lozad.js是一个轻量级的懒加载库,它能够在图片进入可视区时才进行加载,既实现了预加载的目的,又节省了带宽和CPU资源。

---

### **四、图片预加载的注意事项**

**标题:谨慎而行,预加载的合理应用**

1. **合理安排预加载数量**:过多的预加载可能导致带宽占用过高,影响其他关键资源加载速度。

2. **判断用户网络状况**:在低速网络环境下,避免无脑预加载,可采用动态加载策略。

3. **隐私保护与资源优化**:尊重用户隐私,避免预加载无关紧要的资源,同时对图片进行压缩和尺寸裁剪,减轻预加载负担。

---

**结语:**

图片预加载作为Web前端优化的一项关键技术,巧妙运用可以显著提升用户体验,降低用户流失率。在实践中,我们要根据具体项目需求和用户场景,灵活选择合适的预加载策略,做到既能加速页面渲染,又能兼顾性能与资源优化,达到提升网站整体表现的终极目标。而不断精进和深化前端优化技术,正是每一位前端开发者追求卓越的必由之路。