初识 HTTP/2(二)

HTTP/2 时代的开启为前端开发带来了最佳体验。

如果你对 HTTP/2 有所了解,那你可能用过它,或者至少想过怎样能把它融入你的项目中。尽管有很多关于它如何改变工作流程,提高 Web 速度和效率等方面的猜想,但最佳使用方式还没有定下来。这里我想讲的就是我在之前的项目中所发现的 HTTP/2 的最佳实践。

如果你还不确定什么是 HTTP/2,或者为什么它能改进你的工作,可以先看看我介绍背景方面的第一篇文章

记住:开始之前,我要告诉你,尽管你的浏览器可能支持 HTTP/2,但你的服务器可能不支持。检查你的主机托管服务,看看他们是否提供 HTTP/2 的支持。否则你可能要建立你自己的服务器。这篇文章并不会涉及这方面该如何做,但你可以查看 http2 github 页面,找一找这方面的工具。 

热身工作

首先组织好你的文件。看一看下面的文件树结构,作为组织你的样式表的起点:


  1. /styles
  2. |── /setup
  3. | /* 变量、混入(minin)和函数 */
  4. |── /global
  5. | /* 能放在任何组件和部分中的可重用组件 */
  6. |── /components
  7. | /* 特殊组件和部分 */
  8. |── setup.scss // setup 样式索引
  9. |── global.scss // 全局样式索引

这会把你的样式分到三个目录下面:setupglobal 和 componenets。接下来我会说明这些目录对你的项目有什么用。 

setup 目录

setup 目录保存所有的变量、函数、混入minin以及一些正常编译需要的其它文件的定义。要想让这个目录物尽其用,把这个目录下所有内容导入到 setup.scss 文件中是个很不错的主意,这样这个文件就会像下面所展示的一样:


  1. /* setup.scss */
  2. /* 变量 */
  3. @import "setup/variables/colors";
  4. /* 混入 */
  5. @import "setup/mixins/color";
  6. /* 函数 */
  7. @import "setup/functions/color";
  8. ... 等等

现在我们能快速引用这个站点中的所有定义,应该确保在所有的样式文件顶部包含我们这里创建的这个文件。

global 目录

接下来的目录,global 目录,应该包含可在当前站点的多个部分或者每一个页面中重复使用的组件。像按钮、文本、主要样式,以及你的浏览器默认设置应该放在这里。我不建议把页面的头部或底部样式放在这儿,因为某些项目中没有头部,或者不同页面头部不同。而且,底部永远是页面的最后一个元素,所以在用户加载完当前站点的其它东西前,不必过分优先考虑加载底部样式。

记住,如果没有那些定义在 setup 目录下的东西,你的 global 样式就可能没有作用,你的 global 文件看起来应该像这样:


  1. /* global.scss */
  2. /* 应用定义 */
  3. @import "setup";
  4. /* 全局样式 */
  5. @import "global/reset";
  6. @import "global/buttons";
  7. @import "global/typography";
  8. @import "global/grid";
  9. ... 等等

注意,首先要做的就是导入 setup 样式。这样的话,之后的文件都可以引用这个样式里的定义。

由于站点内的每个页面都需要 global 样式,我们可以用典型的方式,在 <head> 标签内用一个<link> 标签来加载它们。你所看到的将是一个十分小巧的 css 文件,或者说理论上小巧的,这取决于你需要多少全局样式。

最后,你的组件

注意,我没有在上述目录树中的 components 目录里包含索引文件。这是 HTTP/2 所带来的效用。直到现在,我们已经按照标准步骤构建了一个典型的站点,保持相当简单的结构,仅选择全局化那些最重要的样式。组件充当它们自己的索引文件。

大多数开发者有独特的组织组件的方式,因此我并不想影响你的策略。但是,你所有的组件看起来应该像这样:


  1. /* header.scss */
  2. /* 应用定义 */
  3. @import "../setup";
  4. header {
  5. // 样式
  6. }
  7. ... 等等

同样的,你要把 setup 样式包含进来,确保所有东西在编译时都定义过。除了编译这些文件,以及可能要把他们放到 /assets 目录,以便很容易找到模版,对这些文件你不必 拼接concatenate、压缩minify 它们或者改变什么。

现在样式表已经差不多了,构建站点应该很简单。

构建组件

或许对于模板语言你有自己的选择,这取决于你的项目,有可能是 Twig、Rails、Jade 或者 Handlebars。我认为考虑组件最好的方式是它是否有自己的模版文件,它该有个与名字相应的样式。这样你的项目中,模版和样式的比例就会是个不错的 1:1 的比例,而且你知道哪个文件有哪些东西,哪里有哪个文件,因为它们的命名是有规律的。

现在它正步入正轨,用好 HTTP/2 的多种功能十分简单,让我们做一个模版:


  1. {# header.html #}
  2. {# compiled header styles #}
  3. <link href="assets/components/header.css" rel="stylesheet" media="all">
  4. <header>
  5. <h1>This Awesome HTTP/2 Site</h1>
  6. ... 等等

非常好!在模版里你可能有更简单的方式链接到资源,但这里显示你所要做的仅是在开始构建时,在模版文件中链接一个小小的头部样式。这将允许你的站点仅仅加载特定资源到任意给定页面的组件中,而且,能够设定页面从头到脚的组件的优先级。

结合在一起

现在所有的组件都有结构,浏览器将会类似以下方式来渲染它们:


  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <link rel="stylesheet" media="all" href="/assets/global.css">
  5. </head>
  6. <body>
  7. <link rel="stylesheet" media="all" href="/assets/components/header.css">
  8. <header>
  9. ... etc
  10. </header>
  11. <link rel="stylesheet" media="all" href="/assets/components/title.css">
  12. <section class="title">
  13. ... etc
  14. </section>
  15. <link rel="stylesheet" media="all" href="/assets/components/image-component.css">
  16. <section class="image-component">
  17. ... etc
  18. </section>
  19. <link rel="stylesheet" media="all" href="/assets/components/text-component.css">
  20. <section class="text-component">
  21. ... etc
  22. </section>
  23. <link rel="stylesheet" media="all" href="/assets/components/footer.css">
  24. <footer>
  25. ... etc
  26. </footer>
  27. </body>
  28. </html>

这是一个高级别方法,但你的项目中可能有调整的更细致的组件。例如,在头部的 <nav> 组件可能要加载自己的样式表。尽你所能地自由发挥,让组件更有作用 - HTTP/2 不会因这些需求而阻碍你!

原文发布时间为:2017-01-13

本文来自合作伙伴“Linux中国”

时间: 2024-08-01 20:30:42

初识 HTTP/2(二)的相关文章

风行软件基本教程

1.风行软件播放快捷键:快进和快退:左.右箭头,分别向后.前跳20s画面音量调节:上.下箭头,分别是提高.减小音量静音:ctrl+M暂停/播放:空格键全屏播放/还原:回车或者鼠标双击播放窗口2.风行老板键:风行界面为激活状态下按"~",风行界面会隐藏.点击风行快捷方式图标(重新开启风行)可以再显示出来.注意:播放状态下界面隐藏了并不能停止播放,会有声音. 初识风行界面二 三.软件菜单流行界面点击风行2.4.1按钮,如下视图: 流行界面点击风行2.4.1按钮,如下视图: F."

iOS界面布局之二——初识autolayout布局模型

iOS界面布局之二--初识autolayout布局模型 一.引言      在上一篇博客中介绍了传统的布局方式:autoresizing.随着iphone型号的越来越多,屏幕的标准也更加多样化,通过autoresizing已经不能满足开发的需求,而进行两套布局或者动态代码控制又大大增加了开发者的工作量,autolayout的出现拯救个这一切,它让动态布局变的十分简单便捷.     autoresizing介绍:http://my.oschina.net/u/2340880/blog/423357

Extjs学习笔记之二 初识Extjs之Form_extjs

Extjs中的表单组件是Ext.form.BasicForm,不过最简单最常用的是Ext.form.FormPanel控件,它继承自Panel,具有一定的界面显示控制能力,它其中包含着一个BasicForm对象,用来执行向服务器提交,加载等动作.Extjs也对常用的html表单项进行了封装,提供了一些额外的功能,比如数据验证.实际使用的时候只要向FormPanel中添加这些表单项即可.常见的表单项有,TextField,NumberField,Radio,CheckBox等. 下面通过一个例子来

Flash AS 3.0入门教程:初识AS 3.0

初识AS3.0 学习AS3.0已有一段时间了,想把自已对AS3的一些认识和大家分享一下.主要想说说AS3与AS2的不同之处,没有什么逻辑性,想到什么就写点什么,因此,它不适合AS高手们阅读.本文将力求用最直白的语言,尽量不用那些艰涩难懂的名词和术语. 一.在什么地方写代码 失望,以为要说点啥,原来是这么小儿科的问题.没办法,我说过了,本文不适合AS高手阅读的.为了更好地理解,我们还是用例子来说明.现在,就让我们一起来回顾一下,在AS2中我们都会把代码写在什么地方.我们在AS2中建一新文档,新建一

iOS中CoreData数据管理系列一——初识CoreData

iOS中CoreData数据管理系列一--初识CoreData 一.何为CoreData     CoreData是一个专门用来管理数据的框架,其在性能与书写方便上都有很大的优势,在数据库管理方面,apple强烈推荐开发者使用CoreData框架,在apple的官方文档中称,使用CoreData框架可以减少开发者50%--70%的代码量,这虽然有些夸张,但由此可见,CoreData的确十分强大. 二.设计数据模型     在iOS开发中,时常使用SQL数据库对大量的表结构数据进行处理,但是SQL

iOS流布局UICollectionView系列一——初识与简单使用UICollectionView

iOS流布局UICollectionView系列一--初识与简单使用UICollectionView 一.简介         UICollectionView是iOS6之后引入的一个新的UI控件,它和UITableView有着诸多的相似之处,其中许多代理方法都十分类似.简单来说,UICollectionView是比UITbleView更加强大的一个UI控件,有如下几个方面: 1.支持水平和垂直两种方向的布局 2.通过layout配置方式进行布局 3.类似于TableView中的cell特性外,

iOS开发CoreAnimation解读之一——初识CoreAnimation核心动画编程

iOS开发CoreAnimation解读之一--初识CoreAnimation核心动画编程 一.引言         众所周知,绚丽动画效果是iOS系统的一大特点,通过UIView层封装的动画,基本已经可以满足我们应用开发的所有需求,但若需要更加自由的控制动画的展示,我们就需要使用CoreAnimation框架中的一些类与方法.这里先附上前几篇与动画相关的博客地址,这一系列,我们抽出其中的CoreAnimation框架来详细解读. UIViewAnimation动画的使用:http://my.o

Android零基础入门第37节:初识ListView

原文:Android零基础入门第37节:初识ListView    之前我们学习的一些UI组件都比较简单,但是在实际开发中,会经常遇见列表界面设计,如通讯录.电话列表.信息列表等.那么从本节开始来详细学习列表界面设计.     一.了解ListView       在Android开发中,ListView是比较常用的控件,它以列表的形式显示具体内容,并且能够根据数据的长度自适应显示.在学习ListView之前,先来一起了解AdapterView.     AdapterView是一组重要的组件,

Android零基础入门第38节:初识Adapter

原文:Android零基础入门第38节:初识Adapter     在上一节一起了解了ListView的简单使用,那么本节继续来学习与ListView有着千丝万缕的Adapter.     一.了解MVC模式       在开始学习Adapter之前我们要来了解下这个MVC模式.说起MVC模式,估计很多同学已经或多或少听说过,可能在前面的Java开发中也有所接触.     MVC全名是Model View Controller,是模型(model).视图(view).控制器(controller