热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Web技术应用规范(草案)

第一章总则第一条目的前端开发是一系列工具和流程的集合,本规范旨在提升前端代码的质量,对前端开发进行全方位指导,统一编码规范、提高可读性

第一章 总则


第一条 目的

前端开发是一系列工具和流程的集合,本规范旨在提升前端代码的质量,对前端开发进行全方位指导,统一编码规范、提高可读性、降低维护成本,以实现高效、可持续的工作流。


第二条 范围

本标准适用于所有的Web应用及App开发。


第二章 开发规范


第三条 一般规范

应用在HTML、CSS、Javascript等的通用规则。


3.1 通用规范


3.1.1 技术选型

前端是一门发展中的技术,标准、框架等更新速度快、调整幅度大,技术选型时应考虑到开源技术中适用于当前项目的多种可能,多角度考察比较,并从中选取框架运行稳定的版本,在技术储备充足时,应兼顾考虑相对前沿技术。


3.1.2 目录结构

规范的文件目录结构有助于提高项目的逻辑结构合理性,对应用扩展和合作,及团队开发均有益处。
应用的核心框架、静态资源、脚本模块、上传文件等应分置不同文件,严格遵循模块化开发的要求,尽量做到规范化。不需要直接暴露给用户的文件,应该放在web服务器访问不到的目录,避免泄露设置信息。


3.1.3 文件资源命名

1).项目命名全部采用小写,以下划线分隔;
2).使用驼峰方式命名文件名与文件所在的文件夹,便于统一配置;
3).确保文件命名总以字母开头而不是数字;


3.1.4 编码格式

通过声明一个明确的字符编码,让浏览器快速确定适合的渲染方式,通常指定为’UTF-8’。


3.1.5 文本缩进

采用四个空格或者Tab缩进,不要混用。


3.1.6 代码注释

注释是对无法自我说明的代码进行解释,注释可提高代码的可维护性、可读性,开发人员应在必要时添加符合规范的注释。注释应至少包含方法、函数的作者/维护人,描述,出入参,示例及维护日期等信息。如下场景必须添加注释:

1). 核心代码及较晦涩部分。
2). 易存在错误的代码段。
3). 浏览器特殊的HACK代码。
4). 业务逻辑强相关的代码。


3.1.7 代码检查

对于Javascript这种弱类型的编程语言,严格遵循编码规范和格式化风格非常重要。前端开发人员需严格遵循开发规范,并使用自动代码检查工具(如ESLint)降低语法错误,确保代码正确执行。
ESLint是一款检查JS代码是否规范的工具,用来检查JS代码的规范性。它提供了配置的方法,来检查不符合开发规范的错误,并支持ES6语法。


3.2 HTML规范


3.2.1 文档类型

使用HTML5的文档类型声明:。

3.2.2 脚本加载

出于性能考虑,脚本应该异步加载。脚本引用写在body结束标签之前,并带上async属性,避免阻塞CSSOM执行。


3.2.3 语义化

使用合适的HTML元素,可提高代码的渲染效率,有利于提升SEO,对于可访问性、代码重用、代码效率有重要意义。


3.2.4 关注点分离

结构、表现、行为分离是前端开发工程化的最佳实践,为保持代码干净整洁可维护,降低代码耦合度,并进行工程化,应严格遵循三者分离的规范要求。


3.3 CSS规范


3.3.1 选择器

1). 构建选择器时应使用清晰、准确、有语义的类名。
2). 选择器的设计应尽可能精准,避免使用标签选择器,使用类名而不是元素,这样更容易维护。
3). 减少选择器的长度,每个组合选择器的长度应控制在3个以内。


3.3.2 属性

css提供了各种缩写属性,如font字体、transiton变换、animation动画等,使用缩写属性对于代码效率和可读性亦有裨益。


3.3.3 重绘重排

为了保证更好的可读性和渲染效率,样式声明应该遵循以下顺序:


1). 结构性属性:

a). display, float,visibility,overflow, clear等
b). position, left, top, right, z-index 等.
c). border ,width,height 等.
d). margin, padding


2). 表现性属性:

a). font, text,word,opacity 等
b). color,background等
c). transition,animation,content等


3.3.4 代码组织

1). 以组件为单位组织代码。
2). 制定一个一致的注释层级结构。
3). 当使用多个 CSS 文件时,通过组件而不是页面来区分他们。


3.3.5 效率工具

预处理工具和后处理工具能提高css开发效率,推荐使用less、sass、stylus及postcss等工具使用模块化开发以提高效率,CSS reset文件宜采用开源标准,如normalize.css等。


3.4 图像规范


3.4.1 图像压缩

所有的图片必须经过压缩和优化才能发布。


3.4.2 图片格式

背景图建议使用PNG格式,在需要兼容古老浏览器(IE8及以前)的项目中,尽可能选择PNG-8而不是PNG-24。
内容图片建议使用JPG。
装饰性图使用PNG。


3.4.3 CSS Sprite

CSS Sprite可以减少HTTP请求数,是推荐使用的图片处理技术。


3.4.4 图标字体

图标字体可大幅减少零碎小图标的使用,可使用图标字体的场景应减少图片的使用。


3.4.5 其他

图片是web应用中最耗费资源的内容,应尽量减少图片的使用,可使用CSS、Canvas、SVG等技术实现的简单样式应避免使用图片。


3.5 Javascript规范


3.5.1 严格模式

严格模式 ‘Use strict’ 对不同的JS语境会做严格地错误检查,使用严格模式也可确保代码更加健壮、运行更加快捷,并禁止使用未来可能被引入的预留关键字。


3.5.2 代码风格

本规范无意于规定是否需要空格、分号等代码风格问题,关于这等规范,建议采用统一的ESLint配置以解决代码风格问题(参考standardjs风格)。


3.5.3 标准特性

优先考虑使用标准特性,为最大限度的保证扩展性与兼容性,首选标准特性,而不是非标准特性,如:首选string.charAt(3)而非string[3]。


3.5.4 函数式编程

函数式编程可以简化代码并缩减维护成本,易复用、利于降低耦合度。
例外:在“重代码性能,轻代码维护”的情况之下,要选择最优性能的解决方案而非可维护性更好的方案(比如用简单的循环语句代替 forEach)。


3.5.4 组件化开发

1). 页面上的每个独立的可视/可交互区域视为一个组件;
2). 每个组件对应一个工程目录,组件所需的各种资源都在该目录下就近维护;
3). 由于组件具有独立性,因此组件与组件之间可自由组合;
4). 页面是组件的容器,负责组合各组件形成功能完整的界面;
5). 当不需要或替换组件时,可以整个目录删除/替换。


3.5.7 技术框架/库

前端技术发展日新月异,主流框架各具特色。如何对当前项目进行技术选型是一项复杂且没有定论的工作,但选型时的一些基本遵循是有共识的。参考点有:
1). 框架是否成熟
2). 架构和模式
3). 生态系统
4). 与项目契合度
5). 团队技术储备
目前一些代表性框架/库有:React、Angular、Vue、jQuery、Bootstrap等,如:
React:采用Virtual Dom,并衍生有React Native支持原生应用,采用单向数据流,但底层采用的JSX有技术门槛;
Angular: 依赖注入,双向数据绑定,支持TypeScript,面向对象等,但脏检查在watcher增多时效率会有明显下降;
Vue:轻量级,双向数据绑定,平缓的学习曲线,在中小型简单应用中有更大优势。

以上对当前主流框架的说明仅做技术选型时的一般参考,要经达权变,不可荆人涉澭。


第三章 工程规范


第四条 性能优化

开发一款完整的web应用时,前端将面临诸多的工程问题,如:多功能、多系统、多人合作,高性能的CDN部署、缓存控制、按需加载、首屏渲染、服务端推送等,这些问题的基本要求就是组件化开发和资源管理。
依照不同的优化目标,应该采用的方案至少有:


优化目标优化方案
请求数量合并脚本和样式表,CSS Sprites,拆分初始化负载,划分主域
请求带宽开启GZip,精简Javascript,移除重复脚本,图像优化
缓存使用使用CDN,使用外部Javascript和CSS,添加Expires头,减少DNS查找,配置ETag,使Ajax可缓存
页面结构将样式表放在顶部,将脚本放在底部,尽早刷新文档的输出
代码校验避免CSS表达式,避免重定向

在前端开发的工程管理领域有很多细节值得挖掘和探索,性能优化的分析和研究对前端团队技术的积累发展也大有裨益,项目开发中应对此有充分考量。


第五条 web安全

本章节的目的是让开发者对各种web安全威胁的常见攻击手段有基本的了解,以便我们能够快速定位漏洞代码、解除安全隐患。
XSS:攻击者利用应用程序的动态数据展示功能,在html页面里嵌入恶意代码。当用户浏览该页面时嵌入的html恶意代码即被执行。危害主要有:盗取用户COOKIE伪造身份、下载病毒木马、钓鱼、蠕虫攻击等。
FLASH:利用flash在安全配置和文件编码上的问题,绕过浏览器同源策略发起跨域请求,如CSRF攻击、钓鱼。
注入攻击:包括SQL注入、代码注入、XML注入等,如SQL注入,当程序将用户输入的内容拼接到SQL中一起提交给数据库执行时,就会产生SQL注入威胁。解决方案是对用户输入进行转义。
文件操作: 应用在处理用户上传的文件时,没有判断文件的扩展名是否在白名单内,导致攻击者可以上传任意文件甚至脚本木马到服务器上直接控制服务器。解决方案是在用户上传文件请求的代码中过滤文件扩展名,并保证上传文件的目录必须是http请求无法直接访问到的。
访问控制: 由于应用没有做权限控制或者权限控制过于简单,攻击者可以通过猜测管理员页面URL进行访问,实现权限提升攻击,建议使用成熟的权限框架解决该问题。
Session管理:为防止XSS漏洞导致用户COOKIE被盗,应设置COOKIE为httponly、Secure,并设置超时时间。
密码算法安全: 项目中涉及到的敏感信息不可采用简单算法加密、否则当攻击者获取有足够样本时,将可以反推出解密算法,从而泄露重要信息。其他一些如base64、escape、urlencode等只是编码格式,不可用作密码算法。必须采用符合业内安全强度标准的密码算法,如SHA-256等。


第四章 附则


第六条

本规范作为web开发人员的一般参考,自发布之日起执行。


推荐阅读
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • Java源代码安全审计(二):使用Fortify-sca工具进行maven项目安全审计
    本文介绍了使用Fortify-sca工具对maven项目进行安全审计的过程。作者通过对Fortify的研究和实践,记录了解决问题的学习过程。文章详细介绍了maven项目的处理流程,包括clean、build、Analyze和Report。在安装mvn后,作者遇到了一些错误,并通过Google和Stack Overflow等资源找到了解决方法。作者分享了将一段代码添加到pom.xml中的经验,并成功进行了mvn install。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
author-avatar
好孩子_瑾马甲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有