Web最佳实践阅读总结(1)
介绍
最近开始刷一些书和题,此系列是介绍在读Web最佳实践
的一些收获和体会。
web前端发展现状
存在问题:
- 代码组织混乱
- 代码格式的问题突出
- 页面布局随意
- 网站整体性能差,没有意识到应用诸如缓存,动态加载,脚本压缩,图片压缩等提高性能技术
推荐做法:
- 压缩样式表和脚本文件
- 减少HTTP请求次数
- 简洁和符合W3C标准的HTML和CSS代码能减少浏览器解析的时间,加快渲染过程
- 页面请求数量越少,相对页面的加载速度更快
- 在JS代码中选择性能更好的实现方案,如延迟加载,动态加载等技术;
延迟加载
<script type=”text/javascript” src=”" id=”my”></script>
<script type=”text/javascript”>
setTimeout(“document.getElementById(‘my').src='include/php100.php'; “,3000);//延时3秒
</script>
最后加载
- 引入外部js脚本文件时,如果放入html的head中,则页面加载前该js脚本就会被加载入页面,而放入body中,则会按照页面从上倒下的加载顺序来运行javascript的代码,所以可以把js外部引入的文件放到页面底部,来让js最后引入,从而加快页面加载速度
动态加载
<scrīpt src='' id="s1"></scrīpt>
<scrīpt language="javascrīpt">
s1.src="test.js"
</scrīpt>
前端代码重构
- 删除无用代码,精简代码(不起作用的CSS样式和废弃的JavaScript函数)
- 前端代码规范化,把CSS代码放到独立的文件中,在JS定义局部变量,把部分全局变量改变成局部变量
- 前端代码模块化,引入面向对象的思想来重构JavaScript代码,进一步明确公有接口和私有接口
提高页面性能:
- 将部分不影响首页展示的JS文件延迟到页面的加载后加载
- 删除页面中初始隐藏的区域,改为通过JS按需动态生成
- 页面中的部分图片延迟加载
- 调整CSS和JS文件引用顺序,即CSS在前,JS在后
- 给静态文件设置缓存,使用CSS Sprite,合并背景图
- 合并和压缩发布后的CSS和JS代码模块
前端重构最佳实践
- 重构前一定要预测风险,最好先完善自动化测试代码
- 重构的目的和范围要明确,提高代码的可维护性,可读性和性能
- 最好先易后难,循序渐进。先修改诸如命名,格式等不涉及具体逻辑的内容
- 重构过程中要持续测试,在多个浏览器测试,确保重构的部分功能正确。切记大量重构后再进行测试,因为大量重构后基本很难记得重构的逻辑,也可能遗漏部分测试用例
- 性能提升,先进行检测网站的整体性能并量化,找出性能瓶颈。重构过程中要持续监控性能,并进行对比
前端框架的使用
项目需求
- 调查项目是否需要AJAX操作
- 是否需要模块化
- 数据传输格式JSON或者XML
- 需要支持的浏览器
- 移动还是普通网站
- 需要的UI模块(模态窗口,滑块控件,进度条,提示框,分割框,幻灯显示,自动填充)
- 项目的特点
- 框架的特点
代码质量
- 编写高质量,标准的HTML(标准校验工具,ESLint, Flow, JSDoc, ts)
明确浏览器支持范围
- Chrome和Safari IE Tester(IE兼容测试工具
避免浏览器兼容性的问题
- 先考虑更改方案,使用没有兼容问题的代码
- 考虑如何兼容的问题
- 兼容IE,使用IE特有的条件表达式(hack)
- 让兼容的代码独立,提高代码的可维护性
HTML5新特性
- 新标签的兼容,CSS3的兼容,新增的API(使用html5shiv框架)
- CSS3本身不支持,会直接忽略
- 新增加的接口的使用,必须添加条件判断(Modernizr)
- 多看Can I use
web性能分析
YSlow,pagespeed
- 基于不同的规则评定网站整体性能评分
- 给出提高网页性能的建议
- 统计页面加载的组件
- 页面的统计信息视图
- 相关性能分析工具集:Smush.it
Chrome开发工具
- Network中可以查看各资源请求和下载所用的时间
- Timeline可以查看网页渲染和交互过程中个步骤所花费的时间,从资源到JS的解析执行,样式的应用和绘制
- Profiles中可以查看网页的CPU及内存占有情况报告
- Audits中提供了各种资源和配置优化的建议和未使用CSS规则的列表
加快代码和资源文件传输的方式
- CDN分发
- 缓存(meta)
- 压缩代码和资源文件(最优)
- Gzip算法(压缩,header可以检查是否开启)
- JS压缩(UglifyJS压缩和优化,YUI Compressor 仅压缩,Closure Compiler压缩和优化)
- CSS(CSS Compressor,YUI Compressor)
- HTML(HtmlCompressor使用时仔细调查和测试,避免压缩工具和破坏)
- 图片资源压缩(TinyPNG,JPEGmini,ImageOptim)
- Airbnb规范: https://github.com/airbnb/jav...
- Eslint规范: https://eslint.org/docs/rules/
- Beachmark.js性能测试: https://benchmarkjs.com/docs#toc
Web最佳实践阅读总结(1)的更多相关文章
- Web最佳实践阅读总结(2)
代码符合标准 标准的页面会保证正确的渲染 页面容易被搜索引擎搜索,提高搜索排名(SEO) 提高网站的易用性 网页更好维护和扩展(Validator,HTML Validator 属于Firefox插件 ...
- PHP-PHP核心技术与最佳实践阅读
1.对象的实质: 对象就是数据, 对象本身不包含方法, 但是对象有一个"指针"指向一个类, 这个类里可以有方法 2.反射是指在PHP运行状态中, 扩展分析PHP程序, 导出或者提取 ...
- Web 前端最佳实践
Web 最佳实践 前端 选择器 尽量使用ID选择器 基于Id的选择器:先使用ID选择器定位,然后再使用find方法精确查找 // Fast: $( "#container div ...
- 【转】优化Web程序的最佳实践
自动排版有点乱,看着蛋疼,建议下载中文PDF版阅读或阅读英文原文. Yahoo!的Exceptional Performance团队为改善Web性能带来最佳实践.他们为此进行了 一系列的实验.开发了各 ...
- Web前端优化最佳实践及工具集锦
Web前端优化最佳实践及工具集锦 发表于2013-09-23 19:47| 21315次阅读| 来源Googe & Yahoo| 118 条评论| 作者王果 编译 Web优化Google雅虎P ...
- 【Web前端开发最佳实践系列】前端代码推荐和建议
一.常用的前端文件的组织结构: 1.js (放置JavaScript代码) lib(放置框架JavaScript文件) custom.js 2.css(放置CSS样式代码) lib(放置框架CSS文件 ...
- 《modern-php》 - 阅读笔记 - 最佳实践
过滤.验证和转义数据 过滤数据 不要相信任何外部数据! 常见的有以下几种数据需要过滤:HTML,SQL查询,用户提交的信息(邮件地址.电话号码.身份证) HTML htmlentities() HTM ...
- JavaScript Web 应用最佳实践分析
[编者按]本文作者为 Mathias Schäfer,旨在回顾在客户端大量使用JavaScript 的最佳 Web应用实践.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 对笔者来说,Jav ...
- 【社区公益】送《Web前端开发最佳实践》给需要的人
算起来至今,我进入软件开发行业已经有11年之久.从最初的研究人工智能,到后来的Web开发,控件开发,直到现在纯粹的Web前端开发.虽然没有大的作品问世,但也是勤勤恳恳,踏实做事,低调做人.从来不吹牛逼 ...
随机推荐
- Weisfeiler-Lehman(WL) 算法和WL Test
Weisfeiler-Lehman 算法 很多论文中会讲,从另一个角度来讲,GCN模型可以看作图上非常有名的 Weisfeiler-Lehman 算法的一种变形.那么什么是 Weisfeiler-Le ...
- 通过对比语法差异,让会JAVA的你快速学会Kotlin的开源宝藏项目
今天有个小伙伴来问TJ君,说自己JAVA用的贼溜,想再学习下Kotlin,问TJ君上手难不难? 怎么说呢?其实TJ君一直觉得语言这方面,是触类旁通.一通百通的,既然JAVA已经贼溜了,想必学其他的语言 ...
- Leaflet:LatLng、LatLngBounds、Point、Bounds、Icon
LatLng 代表一个有着确定经纬度坐标的地理点. 1.用例 var latlng = L.latlng(50.5,30.5); 所有Leaflet的方法中接收的LatLng参数均可以用数组[ ]或者 ...
- 超好用的Markdown编辑器Typora中的常见语法
目录 下载网址 安装 一.标题 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 二.语法环境 三.单选 四.字体 五.分割符 六.列表 七.图片引入 八.表格 九.超链接 下载网址 正版中 ...
- 从头造轮子:python3 asyncio之 sleep (4)
前言 书接上文:,本文造第四个轮子,也是asyncio包里面非常常用,并且非常复杂的一个函数sleep 一.知识准备 ● time.sleep直接让当前线程睡觉,但是这种方式显然是不能接受的,如果当前 ...
- 二级py--day2
二级py day2-3 1.进程至少活动情况分为:运行状态.就绪状态.等待状态(阻塞状态).创建状态.终止状态 2.进程的特性包括: 并发性和动态性 3.计算机地址位数决定了内存的最大容量,决定了虚拟 ...
- petite-vue源码剖析-双向绑定`v-model`的工作原理
前言 双向绑定v-model不仅仅是对可编辑HTML元素(select, input, textarea和附带[contenteditable=true])同时附加v-bind和v-on,而且还能利用 ...
- laravel报错 : No application encryption key has been specified.
创建了新的laravel项目后, 运行提示:No application encryption key has been specified 解决方法: 这个是由于没有配置好 APP_KEY 在终端上 ...
- 手写 Vue 系列 之 从 Vue1 升级到 Vue2
前言 上一篇文章 手写 Vue 系列 之 Vue1.x 带大家从零开始实现了 Vue1 的核心原理,包括如下功能: 数据响应式拦截 普通对象 数组 数据响应式更新 依赖收集 Dep Watcher 编 ...
- mybatis 日志实现 学习总结03
日志 1.为什么要使用日志 使用日志能对项目: 调试:日志便于记录程序在之前的运行结果 错误定位 数据分析:日志中蕴含了大量的用户数据,包括点击行为,兴趣偏好等,对公司下一步的战略方向有一定指引作用. ...