作者:德来 segmentfault.com/a/1190000004292479 如有好文章投稿,请点击 → 这里了解详情 一.从一个面试题说起 面试前端的时候我喜欢问一些看上去是常识的问题.比如:为什么大家普遍把<script src=""></script>这样的代码放在body最底部?(为了沟通效率,我会提前和对方约定所有的讨论都以chrome为例) 应聘者一般会回答:因为浏览器生成Dom树的时候是一行一行读HTML代码的,script标签放在最后面就不…
请参看文章 https://segmentfault.com/a/1190000004292479 网上的回答: 1.js加载会阻塞其它内容加载,使页面加载时间更长,尤其是js文件太大,有的页面js文件数兆/客户端网速太慢/服务器网速太慢,甚至不能访问等情况. 2.dom操作,页面没提前加载,dom操作会失败,报错. 3.搜索引擎优化.…
一.从一个面试题说起 面试前端的时候我喜欢问一些看上去是常识的问题.比如:为什么大家普遍把 <script src=""></script> 这样的代码放在body最底部? (为了沟通效率,我会提前和对方约定所有的讨论都以chrome为例) 应聘者一般会回答:因为浏览器生成Dom树的时候是一行一行读HTML代码的,script标签放在最后面就不会影响前面的页面的渲染. 我很鸡贼地接着问:既然Dom树完全生成好后页面才能渲染出来,浏览器又必须读完全部HTML才能生…
浏览器的内核主要分为渲染引擎和JS引擎.目前市面上常见的浏览器内核可以分为这四种:Trident(IE).Gecko(火狐).Blink(Chrome.Opera).Webkit(Safari).这里面大家最耳熟能详的可能就是 Webkit 内核了,Webkit 内核是当下浏览器世界真正的霸主. 页面加载过程 浏览器根据DNS域名服务器解析域名得到IP地址: 向这个IP地址发起HTTP请求: 服务器收到,处理,返回HTTP请求; 浏览器得到返回的内容. 浏览器渲染过程 主要分为三步: 1. 解析…
转自:http://blog.csdn.net/u012251421/article/details/50536265 说明: 本文提到的浏览器均是指Chrome. “script标签“指的都是普通的不带其他属性的外联javascript. web性能优化的手段并不是非黑即白的,有些手段过头了反而降低性能,所以在讨论条件和结论的时候,虽然很多条件本身会带来其他细微的负面或正面影响,为了不使论述失去重点,不会扩展太开. 一.从一个面试题说起 面试前端的时候我喜欢问一些看上去是常识的问题.比如:为什…
通过easyui tab添加的子页面JS脚本必须放在body才生效 可通过Chrome查看元素时,head标签是否含有你自己写的JS代码…
建议把脚本放在 <body> 元素的底部. 这会提高网页加载速度,因为 HTML 加载不受制于脚本加载.…
Dev中控件的js事件代码放在form标签中会获取不到(head标签中有其他js代码,未验证是否是这个问题)…
项目里有一个需求是在上传文件的时候需要显示进度条,那么理所当然的在上传完成后就需要提示用户上传完毕并且更新进度条. 之前的预期表现是,上传完毕后,先更新进度条到100%,再alert出提示,所以代码如下. $('progressBar').text('100%'); $('progressBar bar').css('width', '100%'); alert('上传成功'); 问题一:实际表现为先alert出提示,此时被阻塞的页面显示的进度条没有被更新到100%. 分析原因,浏览器UI渲染和…
头部引用jquery包 将下面的一段js写在</body>的前面 <script type="text/javascript"> var ua = navigator.userAgent.toLowerCase(); //判断是不是移动端iPHone Safair浏览器打开的本页面 if (ua.indexOf('applewebkit') > -1 && ua.indexOf('mobile') > -1 && ua…
今天遇到一个浏览器兼容性问题,大致原因就是在用某一个前端框架做分页时,由于是使用的jQuery的hide和show方法,其本质是为某个iframe加上一个display=none,这在chrome中是没有问题的,但是在ie中却会出现白屏的情况,也就是display被设为none的页面,在调用show方法时没有被展示出来. 这个问题一直被定性为浏览器兼容性问题,也就是所使用的前端框架不能够兼容个ie,但是我偶然发现把ie浏览器窗口化/最大化或者仅仅用鼠标拖动的方式调整iframe的大小时,原本白屏…
我们平时在页面上写JS 是放在头部<head>中呢 还是放到body 最下面 能更优化? 查了一番资料,推荐 放在页面底部如: <html> <head> <title>My awesome page</title> <!-- CSS --> <link rel="stylesheet" type="text/css" href="..."> <link r…
HTML代码: <ul class="tasklog-dialog-ul" id="auto_to_bottom"> <li>删除虚拟机快照成功</li> <li>删除虚拟机快照成功</li> <li>删除虚拟机快照成功</li> <li>删除虚拟机快照成功</li> <li>删除虚拟机快照成功</li> <li>删除虚拟机…
NO1---jquery判断窗体滚动条到底部 $(window).scroll(function () {if ($(window).scrollTop() >= $(document).height() - $(window).height()) {alert("噢,滚动条到底部了.");}}); NO2---jquery判断容器滚动条到底部 $("#contain").scroll(function(){var viewH = $(this).height…
我理解的是,单独的STORE,会在应用程序开始时就加载, 而VIEWMODEL的STORE,会在VIEW加载时才开始加载. PROXY放在STORE,则会在调用这个STORE的VIEW才能请求服务器数据. 如果PROXY放在MODEL时,则凡使用这个MODEL的相关VIEW都可以请求服务器数据,达到重用的目的.…
简单说一下这个情况,html的页面的各部分都是动态渲染的,所以头部的某些个样式调用函数需要在页面初始化的时候被加载,这个我也是知道的,结果后边代码敲着敲着,就把这个事儿给忘了,然后启动项目的时候,页面死活不是想要的样子,更无语的是当时还觉得我的js是没问题的,为啥呢?该有的函数都有了,函数的调用地方都有明确指向了,我就这样墨迹了块半个小时,最后忍不住了,回头看了一眼js页面顶部才发现我的代码: $(function(){ }); 初始化里边是空的,这不就干了个尬! 引以为戒,以后初始化的函数一定…
let scrollHandle = (el) => { // 如果已经滚到底部了 if (el.scrollHeight - el.scrollTop === el.clientHeight) { ) } } // 懒加载优化:滚动节流策略 let __SCROLLTIMER__ = null // 绑定滚动事件 $('.dgtable__warp').scroll(e => { clearTimeout(__SCROLLTIMER__); ); })…
document.querySelector('.content').addEventListener('scroll',function () { //读取内容区域的真实高度(滚动条高) // console.log(this.scrollHeight); //读取滚动条的位置 // console.log(this.scrollTop); //设置滚动到的位置 // this.scrollTop=800; //读取元素的高度 // console.log(this.clientHeight)…
web中当我们把text等的宽固定后如果文本框中内容过多就只能看到前面部分的内容,这时我们可以用样式控制当鼠标移到文本框时显示全部内容. var pointX; var pointY; $(function(){ $(".txtstyle").bind("mouseover",function(e){ pointX = e.pageX; pointY = e.pageY; showTip(e); }).bind("mouseout",functi…
最近折腾爬虫,后端使用jQuery进行数据采集,一般都是先从浏览器中将采集代码调试好后直接放到后端跑了. 有些网址没有引用jQuery,那调试起来就不方便了,可以用以下代码动态添加script标签,将jQuery引用到页面中. var scriptBlock = document.createElement('script'); scriptBlock.src = 'http://code.jquery.com/jquery-1.11.1.js'; document.getElementsByT…
好久没有写博客了,想到2年前答应要放出源代码的也没放出来,最近终于有空先把纯js实现无限空间大小的本地存储的功能开源了,项目地址https://github.com/xueduany/localstore,demo见http://xueduany.github.io/localstore/,下面给大家简单说说大概原理,具体细节和异常处理后面有机会在单独说 先说下突破本地localStorage的原理,官方原话是这么说的http://www.w3.org/TR/2013/PR-webstorage…
图片上传代码,支持同步/异步和图片的预览 主要用了两种方式,可兼容大部分浏览器. 第一种使用uploadify异步上传,上传后返回图片路径显示到页面. 每二种使用ajaxSubmit异步上传,为兼容IE8 dataType使用text类型,json类型IE8会当作文件提示下载,不走回调函数.使用JS预览. 废话不多说,直接上代码了. testupload…
因为工作的原因,需要实现这样一个功能:点击按钮,复制文本内容. 百度了一下,大都语焉不详,最终找到了一篇很好的博文,有讲解,有实例,捣鼓了一会,最终实现了功能. 网址在这里http://www.cnblogs.com/PeunZhang/p/3324727.html 在这里,个人做一下总结. 第一步,下载插件. 附件内容:jquery.js jquery.zclip.js ZeroClipboard.swf 下载附件戳这里 第二步,编写实例 copy.html . 注意1:引入jquery.js…
http://www.tuicool.com/articles/2eaQJn 用Grunt配置watch和liveReload组件,可以实时检测指定的文件变化并自动刷新浏览器.目前基本已经成为了我的必备配置.特别是在写前端页面的时候,不用再频繁去点浏览器刷新按钮.工作的时候把浏览器拖到扩展屏,保存文件实时看到变化,特别提高开发效率. 而且livereload插件非常人性化,在检测到不需要重刷新浏览器运行的文件,例如css文件变化时,直接在页面里重载文件,而不刷新页面.使效果反应非常快捷. 下面是…
js获取IP.地区.当前操作浏览器有什么用呢? 我的回答是用处很多,比如现在的异地登录和对用户常用浏览器做数据分析等. 源代码如下:index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Document</title> <script src="http://pv.sohu.com/cityjson?ie=u…
用户行为统计在如今的前端生态中已是稀松寻常,如各种站长统计工具.识别用户访问客户端唯一性是必要的实现,对于web前端获取的设备信息,一般容易想到的是通过navigator.userAgent,但相同设备及浏览器ua就相同了,故ua的辨识度很低,那么web前端识别浏览器设备唯一性是否有其他好办法? 先来说说FingerPrint ,也就是我们常说的指纹识别,FingerprintJS框架可以去github看看介绍,web指纹识别技术通过提取设备的各种特征,据说能达到94%的匿名浏览器区分度.因为这…
JavaScript 是队列的形式一个个执行的 同一时间只能执行一段代码,单线程的  (队列的数据结构) 浏览器是多线程的 JavaScript执行线程负责执行js代码 UI线程负责UI展示的 JavaScript事件循环线程 异步的时候先执行一半 等待另外部分完成后在回到队列里面去就是事件循环线程来做 UI线程 与JavaScript执行线程是互斥的 JavaScript 是单线程的 JavaScript任务分为 同步任务: for 求和 js赋值 js表达式运算 异步任务: dom事件.bo…
现在浏览器种类也越来越多,诸如 IE.Firefox.Chrome.Safari等等,因此现在要实现一个js复制内容到剪贴板的小功能就不是一件那么容易的事了. 在FLASH 9 时代,有一个通杀所有浏览器的js复制内容到剪贴板的方案: 这个方案是一个最流行的方法: 著名的Clipboard Copy解决方案 利用一个clipboard.swf作为桥梁,复制内容到剪贴板. 原理是:创建一个隐藏的flash文件,同时给给flash的变量FlashVars 赋值“clipboard=..”,通过这个赋…
关于JavaScript里面的let,let 语句可以声明一个块级作用域的本地变量,并且可选的将其初始化为一个值. <ul id="list"> </ul> var list = document.getElementById("list"); for (var i = 1; i <= 5; i++) { var item = document.createElement("LI"); item.appendChil…
现在浏览器种类也越来越多,诸如 IE.Firefox.Chrome.Safari等等,因此现在要实现一个js复制内容到剪贴板的小功能就不是一件那么容易的事了. 在FLASH 9 时代,有一个通杀所有浏览器的js复制内容到剪贴板的方案: 这个方案是一个最流行的方法: 著名的Clipboard Copy解决方案 利用一个clipboard.swf作为桥梁,复制内容到剪贴板. 原理是:创建一个隐藏的flash文件,同时给给flash的变量FlashVars 赋值“clipboard=..”,通过这个赋…