记录下最近零零散散学的几个知识点。
图片显示方式
有的时候看到网络上有些图示由模糊变清晰,有些是一直清晰,但是会逐行显示(慢慢的展示全), 是什么因素导致了他们的显示方式?
实际是图片在压缩的时候算法决定了它的显示方式。比如:
小波算法:先模糊然后清晰
离散余弦变换:清晰,逐行显示
前端可以准备多种样子或者分辨率的图片,当网络好或者网络不好,再或者不同的屏幕分辨率的图片。现在出来了一种新的方式:
HTML <picture>
元素是一个容器,用来为其内部特定的 <img>
元素提供多样的 <source>
元素。浏览器会根据当前页面(即图片所在的盒子的容器)的布局以及当前浏览的设备(比如普通的屏幕和高清屏幕)去从中选择最合适的资源。1
2
3
4
5<picture>
<source srcset="smaller.png" media="(max-width:700px)"></source>
<source srcset="bigger.png" media="(max-width:1000px)"></source>
<img srcset="default.png" alt="美女">
</picture>
当然并不是每个浏览器都支持,在实验中。
图片分类
- jpg,jpeg,以24位颜色存储单个位图,可压缩
- png,可做透明图片,体积较大,需要清晰的显示颜色丰富的图片时用
- gif,全透/全不透,不支持半透明
- svg,矢量图,地图中用的多,体积小
注意有的时候只把 尾缀比如.jpg更改为.png 不行,因为只是名称改了,实际上它本质没有更改。需要用工具转换。
播放器形式
【video播放器】
优点:不需要下载额外资源(如:flash播放器需要下载.swf辅助插件),控制简单有较为完整的api。
缺点:每个浏览器的外观都不一样,如果要统一需要自己写ui实现。
【flash播放器】
flash 播放器,兼容性比较好,只需要下载 flash player 即可使用。
缺点是必须要下载额外的 swf 才可以。
视频的外部资源可使用 link 加载样式,这样可以被提前加载。让视频先运行。这是个小 hack。
缓存
页面刷新的时候 sessionStorage (标准浏览器) 是仍然存在的,只有关闭的时候才不存在。同一个浏览器,不同的标签,也是不共享的。
userData 是 IE 的先驱者。
cookie 所有浏览器基本都支持,大小限制不同浏览器也不同,会把数据带给服务器。
openDataBase 是类似于本地数据库这种形式。可以做的东西更多。
localStorage 的缺点是 IE9, IE10 不支持, 注意下 safari 读不到 chrome 的 localStorage。
localStorage 不能跨域,所以存储的时候是在 localStorage 下,按照域名存放的。
造成页面卡死的原因
如果页面突然一直 loading 或者 卡死,可能有以下一些原因。
- 死循环 (while 1 了 ?)
- 大文件占用资源 loading
- 频繁的读写本地资源
页面的重绘和回流
回流一定触发重绘,但是重绘不一定触发回流。
DOM元素的添加、修改(内容)、删除(Reflow+Repaint)
仅修改DOM元素的字体颜色(只有Repaint、因为不需要调整布局)
如何判断是否重绘了呢?1
chrome 开发者工具 => settings ,more tools, rendering, Paint flashing即可, 看到绿色的部分即为发生了重绘的部分
触发重绘可能有的情况:
1、改变字体
2、增加或移除样式表
3、内容变化,如用户在input框输入文字
4、激活css伪类,如:hover
5、脚本操作DOM
6、计算可见的宽高属性
7、设置style属性的值
git 常用命令总结
我总结了已经好多次了,有些命令一段时间不用又会忘记。好记性不如烂笔头。
1 | git log --pretty=oneline |
当手头工作没有完成时,先把工作现场git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场。
rebase merge 的使用法则。
In general the way to get the best of both worlds is to rebase local changes you’ve made but haven’t shared yet before you push them in order to clean up your story, but never rebase anything you’ve pushed somewhere
学习一段代码
这是最近在慕课上看到的一段代码,没事没事看看别人的代码还是有点收获的,比较下自己觉得好的和自己觉得别人可能有所需要改进的。下面这些代码是一位老师写的,大概就是根据版本号来判断资源是不是需要缓存,如果版本号更新了,就去重新拉取资源,并且更新本地缓存。如果版本号没有更新,就直接用本地的缓存。
1 | window.Xhrfactory = function() { |
觉得比较好的,一个是它判断 IE 的方法,利用了只有 IE 可以识别的特性。另外一个是它判断 localStorage 缓存的大小。
还有一个是它利用了自执行函数来去做其实只用去初始化一次的工作。比如判断本地的缓存是否是需要跟新(根据版本号),而不是做成一个函数每次去执行一次。
不好的就是,可能是因为现场写代码,随机想的,所以有些地方可以封装,都没有封装好。