首页 > 代码库 > JS技术分享
JS技术分享
文件碎片是因为文件被分散保存到整个磁盘的不同地方,而不是连续地保存在磁盘连续的簇中形成的。[1]
中文名
文件碎片
外文名
File fragmentations
隶属
文件系统
定义 听语音
磁盘上的文件和文件夹通常占用磁盘的多个簇,并且每个簇大多分散在磁盘上,这些分散的簇称为文件碎片。磁盘上的文件碎片越多,系统读取和新建文件的速度越慢。[2]
当应用程序所需的物理内存不足时,一般操作系统会在硬盘中产生临时交换文件,用该文件所占用的硬盘空间虚拟成内存。虚拟内存管理程序会对硬盘频繁读写,产生大量的碎片,这是产生硬盘碎片的主要原因。
其他如IE浏览器浏览信息时生成的临时文件或临时文件目录的设置也会造成系统中形成大量的碎片。文件碎片一般不会在系统中引起问题,但文件碎片过多会使系统在读文件的时候来回寻找,引起系统性能下降,严重的还要缩短硬盘寿命。另外,过多的文件碎片还有可能导致存储文件的丢失。
文件碎片 听语音
产生
(1)在文件操作过程中,Windows系统可能会调用虚拟内存来同步管理程序,这样就会导致各个程序对硬盘频繁读写,从而产生文件碎片。
(2)还有一种情况就是当中间的一个扇区内容被删除后,新写入一个较小的文件,这样在这个文件两边就会出现一些空间,这时候再写入一个文件,两段空间的任意一部分都不能容纳该文件,这时候就需要将文件分割成两个部分,碎片再次产生了。
(3)最常见的就是下载电影之类的大文件,这期间大家一般都会处理一下其它事情,而下载下来的电影文件被迫分割成若干个碎片存储于硬盘中。因此下载是产生碎片的一个重要源头。还有就是经常删除、添加文件,这时候如果文件空间不够大,就会产生大量的文件碎片,随着文件的删改频繁,这种情况会日益严重。
影响
虽然说文件碎片对于正常工作影响并不大,但是会显著降低硬盘的运行速度,这主要是硬盘读取文件需要在多个碎片之间跳转,增加了等待盘片旋转到指定扇区的潜伏期和磁头切换磁道所需的寻道时间。[1]
磁盘读写操作的原理 听语音
知道了文件碎片的产生原因之后,我们还有必要了解一下程序运行时磁盘的读写动作。一般运行一个程序时,磁盘驱动器的磁头所做的工作是先搜索该程序运行必需的文件,然后读取数据,最后做读后处理——将数据传送至磁盘高速缓存(Cache)和内存中。搜索时间在硬盘性能指标中被称为平均寻道时间(Average seek time),单位为毫秒(ms),当下主流硬盘的平均寻道时间小于9.5ms。如果能将应用程序的相关文件放在磁盘的连续空间内,磁头搜索的时间将会减少很多。读取时也是如此,磁盘读取位于磁头下方扇区的数据所需时间仅为将磁头移到另一地点再读取相同数据所需时间的五分之一。读盘时,系统先检查数据是否在高速缓存中,如果有则直接读取;如果没有则访问磁盘,也就是读盘。当需要多次读取同一份数据时,Cache的作用很大,但对于第一次读取某个文件,Cache就无能为力了。于是搜索时间和读取时间在很大程度上影响着程序执行的效率。
为何要整理磁盘 Windows系统并不能自动将每个文件按照最大程度减少磁头搜索时间的原则放到磁盘上最合适的位置。于是Microsoft在Windows中加入了“Disk Defragment”(文件碎片整理程序),并提供了“TaskMonitor”(任务监视器)来跟踪程序启动过程中的磁盘活动,以利于“Disk Defragment”能够更有效地工作。“TaskMonitor”是随Windows启动而自动运行的(当然要在“启动”中选中“TaskMonitor”)。当加载某个应用程序时,它通过监视磁盘的访问动作来了解该程序启动时搜索和调用的文件,对所需文件进行定位,并将监视结果储存在“C:\Windows\Applog”隐藏目录中。这个目录中的大多数文件以“.lgx”为扩展名,其中“lg”代表记录文件(Log File),“x”表示盘符,如D盘程序就以“.lgd”为扩展名;记录文件的文件名为TaskMonitor所监视的应用程序的文件名,如E盘上的WinZip程序记为“Winzip32.lge”。用户进行文件碎片整理时,该程序会根据Applog目录中的信息把应用程序的相关文件移动到磁盘上的连续空间内。
TaskMonitor仅在程序加载过程中对文件信息进行搜索,并且根据程序的加载频率调整优化的顺序,也就是说使用次数最多的软件可获得最多的关照。Applog目录中的APPLOG.ind文件就记录了应用程序运行的次数。用户需要将常用软件多次启动,接受TaskMonitor的监视和记录,再使用Disk Defragment进行整理,才能真正实现程序启动速度的提高。但如果用户中途改变了常用软件,比如以前常用WinZip,改用ZipMagic,那么在相当长的时间内Disk Defragment还是先把与WinZip相关的文件移到连续的空间内,而不是ZipMagic,除非ZipMagic的加载次数超过WinZip。要解决这个问题,用户可将“Winzip32.lgx”文件删除,记录文件不存在了,Disk Defragment也就不会去优化它了。
1.阻塞IO
图1
从图1我们看到一个最简单的IO操作的流程,从通知内核准备数据阶段到数据从内核Copy到用户空间两个过程都是阻塞的。
2.非阻塞IO
图2
在应用进程在内核数据准备阶段不断接受轮询,直到数据准备完毕。数据从内核Copy到用户空间这个阶段I/O操作还是阻塞的。
3.I/O复用
图3
在内核数据准备(I)阶段,当一个或者多个IO准备就绪时,通知程序,数据从内核Copy到用户空间阶段还是阻塞的,在第I阶段还是轮询实现的,只是所有的IO都集中在一个地方,这个地方进行轮询。同时阻塞多个I/O操作,而且可以同时对多个读操作,多个写操作的I/O函数进行检测,直到有数据可读或可写时,才真正调用I/O操作函数。
4.信号驱动IO
图4
当内核数据准备阶段数据准备完毕的时候,信号通知程序数据准备完毕,数据从内核Copy到用户空间阶段阻塞。
5.异步IO
图5
发出系统调用后,直接返回。通知IO操作完成。
前四种IO操作都属于同步IO操作,最后一种异步IO。二者区别:同步IO在内核Copy到用户控件阶段必须要求进程主动调用recvfrom.而异步IO则将IO操作全部交给内核完成,完成后发信号通知。此期间,用户不需要去检查IO操作的状态,也不需要主动的去拷贝数据
H5是HTML5的简称。HTML5是HTML最新的修订版本,是一种超文本标记语言。H5有两大特点:首先,强化了 Web 网页的表现性能。其次,追加了本地数据库等 Web 应用的功能。
H5页面就是利用html5制作出来的页面,尤其在微信中发展迅速,借由微信这个移动社交平台,正在走进更多人的视野,比如从引爆朋友圈的H5小游戏《围住神经猫》,到颠覆传统广告的大众点评H5专题页《我们之间只有一个字》,各种H5游戏和专题页纷纷崭露头角。
为活动推广运营而打造的H5页面是最常见的类型,形式多变,包括邀请函、贺卡、测试题等形式。与以往简单的静态广告图片传播不同,如今的H5活动运营页需要有更强的互动、更高质量、更具话题性的设计来促成用户分享传播。从进入微信H5页面到最后落地到品牌App内部,那么如何制作H5页面?
其实制作H5页面非常简单,首选平台是应用之星 。整个制作过程无技术要求,图形化操作,简单易上手。具体步骤如下:
第一步:登陆网站点击“应用制作”,进入制作页面。
第二步: 选择“高级模式”,点“+”创建应用。
第三步: 进入制作页面。九个控件,通过点击添加到制作界面,控件的选择使用按照你的需求进行。
第四步:等你一切制作好后,点击保存,发布,即可生成H5页面。
第五步:发布后,你将看到预览页面,其中Web就是你要的H5页面,微信扫描二维码将看到页面的内容,同时也可以分享到你的朋友圈。
如果你想在生成H5页面的同时,也想生成Android app,那么请看这篇教程:应用之星能生成APP吗?怎样生成?
第六步:如果你还想修改你的内容,请直接去个人中心的应用管理里面进行修改,重新发布即可完成内容的更新。
这篇文章主要介绍了javascript获取当前鼠标坐标的方法,可针对不同浏览器获取鼠标的坐标位置,是非常实用技巧,需要的朋友可以参考下
本文实例讲述了javascript获取当前鼠标坐标的方法。分享给大家供大家参考。具体实现方法如下:
对于javascript获取当前鼠标坐标来说,得对不同浏览器的坐标位置有所了解。具体代码如下:
复制代码 代码如下:
<html>
<head>
<title>javascript获取当前鼠标坐标</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<script type="text/javascript">
function mousePosition(ev){
if(ev.pageX || ev.pageY){//firefox、chrome等浏览器
return {x:ev.pageX,y:ev.pageY};
}
return {// IE浏览器
x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
y:ev.clientY + document.body.scrollTop - document.body.clientTop
};
}
function mouseMove(ev){
ev = ev || window.event;
var mousePos = mousePosition(ev);
document.getElementById(‘x‘).innerHTML = mousePos.x;
document.getElementById(‘y‘).innerHTML = mousePos.y;
}
document.onmousemove = mouseMove;
</script>
<style type="text/css">
h3{color:blue;}
p{line-height:30px;height:30px;font-size:14px;width:500px;}
span{color:orange;font-weight:bold;}
</style>
</head>
<body>
<h3>您的鼠标已经被跟踪</h3>
<p> X 轴坐标:<span id="x"></span></p>
<p> Y 轴坐标:<span id="y"></span></p>
</body>
</html>
JS技术分享