转自:http://blog.csdn.net/u012251421/article/details/50536265 说明: 本文提到的浏览器均是指Chrome. “script标签“指的都是普通的不带其他属性的外联javascript. web性能优化的手段并不是非黑即白的,有些手段过头了反而降低性能,所以在讨论条件和结论的时候,虽然很多条件本身会带来其他细微的负面或正面影响,为了不使论述失去重点,不会扩展太开. 一.从一个面试题说起 面试前端的时候我喜欢问一些看上去是常识的问题.比如:为什…
昨晚,朋友拿了一道题问我: a.onclick = function(){ setTimeout(function() { //do something ... },0); }; //~~~ 我只知道这样回调会在JS引擎空闲时被执行,由于是单线程的关系,会进入待执行队列,没想到有人能解释的那么详细,差距啊~ JavaScript API 文档明确定义:setTimeout的第二个参数意义为隔多少毫秒后,回调方法就会被执行.那么可以推断出:这里设成0毫秒,就立即被执行了.—————— 既然立即执行…
昨晚,朋友拿了一道题问我: a.onclick = function(){ setTimeout(function() { //do something ... },0); }; JavaScript API 文档明确定义:setTimeout的第二个参数意义为隔多少毫秒后,回调方法就会被执行.那么可以推断出:这里设成0毫秒,就立即被执行了. ------ 既然立即执行,为什么这段代码的作者为什么要 舍近求远?难道作者写代码的时候喝醉了? 显然不是! 这个问题 David Flanagan 在<…
转载请注明原文地址:http://blog.csdn.net/milado_nju ## 数据对比 前面介绍过Chromium WebView的时候,说过有关ChromiumWebView同Chrome浏览器有很多不同之处,下面以Chromium Content Shell来对比来描述Chromium WebView,这是因为Chrome浏览器的渲染机制等同Content Shell是类似的,不过Chrome浏览器上层代码是源的,所以笔者使用自己编译的Content Shell来分析. 在仔细介…
作者:德来 segmentfault.com/a/1190000004292479 如有好文章投稿,请点击 → 这里了解详情 一.从一个面试题说起 面试前端的时候我喜欢问一些看上去是常识的问题.比如:为什么大家普遍把<script src=""></script>这样的代码放在body最底部?(为了沟通效率,我会提前和对方约定所有的讨论都以chrome为例) 应聘者一般会回答:因为浏览器生成Dom树的时候是一行一行读HTML代码的,script标签放在最后面就不…
浏览器的内核主要分为渲染引擎和JS引擎.目前市面上常见的浏览器内核可以分为这四种:Trident(IE).Gecko(火狐).Blink(Chrome.Opera).Webkit(Safari).这里面大家最耳熟能详的可能就是 Webkit 内核了,Webkit 内核是当下浏览器世界真正的霸主. 页面加载过程 浏览器根据DNS域名服务器解析域名得到IP地址: 向这个IP地址发起HTTP请求: 服务器收到,处理,返回HTTP请求; 浏览器得到返回的内容. 浏览器渲染过程 主要分为三步: 1. 解析…
浏览器端的九种缓存机制介绍 浏览器缓存是浏览器端保存数据用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和浏览器快速地读取本地数据,整体上加速网页展示给用户.浏览器端缓存的机制种类较多,总体归纳为九种,这里详细分析下这九种缓存机制的原理和使用场景.打开浏览器的调试模式->resources左侧就有浏览器的8种缓存机制. 一.http缓存 http缓存是基于HTTP协议的浏览器文件级缓存机制.即针对文件的重复请求情况下,浏览器可以根据协议头判断从服务器端请求文件还是从…
最近看了< webkit技术内幕 >,虽然并不能完全看懂,但是对浏览器的渲染机制也算是有了一个比较完整的认识. 我们从浏览器地址栏输入网址开始到web页面被完整的呈现在眼前,大概的经过了这样一个过程:网址被DNS解析为IP地址 -> 通过IP地址建立TCP连接 -> 发送HTTP请求 -> 服务器处理请求并返回响应 ->  浏览器解析渲染页面 -> 断开TCP连接 可是浏览器是怎么去解析渲染页面的呢?这里就要了解浏览器的内核,也就是浏览器的渲染引擎(严格来说应该是…
周末想顺便把已经做好静态页面的webApp项目做一下SEO优化,由于不想写蹩脚的SSR代码,所以准备采用预渲染,本来想着网上有这么多预渲染的文章,随便找个来跟着做不就完了嘛,结果年轻的我付出了整个周末..... 这篇文章就记录一下最后是怎么配置的 T.T 声明: 以下配置只保留有必要的 生成目录这里使用base代替,请自行修改 vue-cli模板使用webpack,其他模板类推 webApp - 在线预览 Github - 配置了预渲染的demo 1. 简介与使用场景 我们知道SPA有很多优点,…
1. 大致过程 当你这样子回答的时候: 用户输入 url 地址,浏览器查询 DNS 查找对应的请求 IP 地址 建立 TCP 连接 浏览器向服务器发送 http 请求,如果服务器段返回以 301 之类的重定向,浏览器根据相应头中的 location 再次发送请求 服务器端接受请求,处理请求生成 html 代码,返回给浏览器,这时的 html 页面代码可能是经过压缩的 浏览器接收服务器响应结果,如果有压缩则首先进行解压处理,紧接着就是页面解析渲染 解析该过程分为:解析 HTML,构建 DOM 树,…
前言 小汪最近在看[WebKit 技术内幕]一书,说实话,这本书写的太官方了,不通俗易懂. 但是看完书,对浏览器内核的 WebKit 有了进一步的了解,所以从浏览器内核出发,写这篇文章以记录学到的知识,以加深对 WebKit 的理解. 相信很多开发人员在面试时都遇到这个问题,这道题可说是非常非常难的,因为深度可以非常深,广度可以非常广.这题是非常能考查一个前端开发人员的知识体系的题目. 写这篇文章的时候,边写边觉得难 !!! 前端硬核面试专题的完整版在此:前端硬核面试专题,包含:HTML + C…
我们知道SPA有很多优点,不过一个缺点就是对(不是Google的)愚蠢的搜索引擎的SEO不友好,为了照顾这些引擎,目前主要有两个方案:服务端渲染(Server Side Rendering).预渲染(Prerending). 如果你只需要改善少数页面(例如 首页/, /about, /contact 等)的 SEO,那么你可能需要预渲染.无需使用 web 服务器实时动态编译 HTML (服务端渲染, SSR),而是使用预渲染方式,在构建时(build time)简单地生成针对特定路由的静态 HT…
JS引擎也可以叫做JS解释器 浏览器的组成 浏览器的核心是两部分:渲染引擎和JavaScript解释器(又称JavaScript引擎). (1)渲染引擎 渲染引擎的主要作用是,将网页从代码“渲染”为用户视觉上可以感知的平面文档.不同的浏览器有不同的渲染引擎. 以上四步并非严格按顺序执行,往往第一步还没完成,第二步和第三步就已经开始了.所以,会看到这种情况:网页的HTML代码还没下载完,但浏览器已经显示出内容了. (2)JavaScript引擎 JavaScript引擎的主要作用是,读取网页中的J…
承接上一篇:[CSS3进阶]酷炫的3D旋转透视 . 最近入坑 Web 动画,所以把自己的学习过程记录一下分享给大家. CSS3 3D 行星运转 demo 页面请戳:Demo.(建议使用Chrome打开) 本文完整的代码,以及更多的 CSS3 效果,在我 Github 上可以看到,也希望大家可以点个 star. 嗯,可能有些人打不开 demo 或者页面乱了,贴几张效果图:(图片有点大,耐心等待一会) CSS3 3D 行星运转效果图 随机再截屏了一张: 强烈建议你点进 Demo页感受一下 CSS3…
一.浏览器渲染页过程描述   1.浏览器解析html源码,然后创建一个DOM树. 在DOM树中,每一个HTML标签都有一个对应的节点(元素节点),并且每一个文本也都有一个对应的节点(文本节点). DOM树的根节点就是documentElement,对应的是html标签. 2.浏览器解析CSS代码,计算出最终的样式数据. 对CSS代码中非法的语法它会直接忽略掉. 解析CSS的时候会按照如下顺序来定义优先级:浏览器默认设置,用户设置,外联样式,内联样式,html中的style(嵌在标签中的行间样式)…
一.浏览器渲染页过程描述 1.浏览器解析html源码,然后创建一个DOM树. 在DOM树中,每一个HTML标签都有一个对应的节点(元素节点),并且每一个文本也都有一个对应的节点(文本节点). DOM树的根节点就是documentElement,对应的是html标签. 2.浏览器解析CSS代码,计算出最终的样式数据. 对CSS代码中非法的语法它会直接忽略掉. 解析CSS的时候会按照如下顺序来定义优先级:浏览器默认设置,用户设置,外联样式,内联样式,html中的style(嵌在标签中的行间样式).…
在构建页面时,我们会在html中载入一个或多个css和js文件.或许大家都已经习惯了"最佳实践"中,css文件应该放在<head>标签中引入,而js文件则是放在</body>关闭标签前引入的原则,但其中的原因,很多人可能像我之前一样,不是了解得很清楚.在查阅了书籍和资料后,稍微了解的其中的原由. 让我们先看一看浏览器中的渲染流程: 主流程: 详细流程: 当浏览器获得一个html文件时,会"自上而下"加载,并在加载过程中进行解析渲染.     …
float浮动,用于横向布局. 起初的横向布局都用display:inline-block,但是这会导致两个元素之间有空隙,而这是由代码换行解析成空格的,解决元素间有空隙,空格:font-size:0;,但影响很大.   float浮动会破坏line-box,即浮动元素脱离文档流(当给一个元素设置浮动了之后,它不会再占用页面当中的“位置”了),造成的影响:不会撑开父级的高度.如下图: 想要解决这个影响,就得清浮动(清除浮动所造成的影响)了. 清浮动后,如下: 清浮动的方法: 1.给浮动元素的父级…
原文链接:http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/ 有没有被标题中的5个“R”吓到?今天,我们来讨论一下浏览器的渲染(Rendering)-一个产生于Page 2.0生命周期中,甚至有时候会在下载瀑布流中出现的过程. 我们来讨论浏览器在接收到HTML.CSS和JavasSript后,如何把你的页面呈现在屏幕上. 一.浏览器渲染过程 不同的浏览器的渲染过程存在些许不同,但大体的机制是一样的,下图展示的是浏览器自下…
概述 发起一个http请求的过程就是建立一个socket通信的过程. 我们可以模仿浏览器发起http请求,譬如用httpclient工具包,curl命令等方式. curl "http://www.baidu.com"  返回页面数据 curl -I "http://www.baidu.com" -I查看http响应头的信息 curl -I "http://www.baidu.com" -H "Cookie=......; Accept-…
网页中引用的外部文件: JavaScritp.CSS 等常常会阻塞浏览器渲染页面.假设在 <head> 中引用的某个 JavaScript 文件由于各种不给力需要2秒来加载,那么浏览器渲染页面的过程就会被阻塞2秒,直到该JS文件下载并执行完后才继续.前端性能调优时必须排除任何潜在的渲染阻塞点,让浏览器在最短时间内渲染出整体页面.JavaScript为何会阻塞? <!doctype html><html>  <head>    <script type=…
javascript的加载方式,总得来说是在页面上使用script来声明,以及动态的加载这些方式,而动态的加载,在很多js库中都能够很好的去处 理,从而不至于阻塞其他资源的加载,并与其并行加载下来.这样的动态异步的加载方式罗列起来有:Ajax的方式.DOM Element Insert.Iframe.document.write.defer等等.这些都能够很好的处理js在加载的时候不会阻塞资源加载的问题,但是,js 的执行仍然会阻塞浏览器的渲染.或许这是不得不需要付出的代价,有没有一些方式去缓解…
https://juejin.im/entry/590801780ce46300617c89b8 渲染 这张很经典的图许多人都看过,其中的概念大家应该都很熟悉,也就是这么几个步骤:js修改dom结构或样式 -> 计算style -> layout(重排) -> paint(重绘) -> composite(合成) 但是其中有更复杂的内容,我们从更底层来详细说明这个过程,主要是下面这两幅图:上图出自GPU Accelerated Compositing in Chrome上图出自Th…
浏览器的主要组件包括: 1.      用户界面 - 包括地址栏.前进/后退按钮.书签菜单等.除了浏览器主窗口显示的你请求的页面外,其他显示的各个部分都属于用户界面. 2.      浏览器引擎 - 在用户界面和渲染引擎之间传送指令. 3.      渲染引擎 - 负责显示请求的内容.如果请求的内容是 HTML,它就负责解析 HTML 和 CSS 内容,并将解析后的内容显示在屏幕上. 4.      网络 - 用于网络调用,比如 HTTP 请求.其接口与平台无关,并为所有平台提供底层实现. 5.…
梳理浏览器渲染流程 首先简单了解一下浏览器请求.加载.渲染一个页面的大致过程: DNS 查询 TCP 连接 HTTP 请求即响应 服务器响应 客户端渲染 这里主要将客户端渲染展开梳理一下,从浏览器器内核拿到内容(渲染线程接收请求,加载网页并渲染网页),渲染大概可以划分成以下几个步骤: 解析html建立dom树 解析css构建render树(将CSS代码解析成树形的数据结构,然后结合DOM合并成render树) 布局render树(Layout/reflow),负责各元素尺寸.位置的计算 绘制re…
DOM加载:浏览器渲染和操作顺序 1.HTML解析完毕 2.外部脚本和样式表加载完毕 3.脚本在文档内解析并执行 4.HTML DOM完全构造起来 5.图片和外部内容加载 6.网页完成加载 基于这个顺序,我们会发现如果在DOM完全加载之前使用DOM可能会发生错误(这个可能是很多初学者曾遇到的问题),而如果用onload加载函数又必须等待图片.视频等元素的加载,造成无法运行JavaScript.…
http://blog.csdn.net/bd_zengxinxin/article/details/52525781 自己编写App的时候,有时会感觉界面卡顿,尤其是自定义View的时候,大多数是因为布局的层次过多,存在不必要的绘制, 或者onDraw等方法中过于耗时.那么究竟需要多快,才能给用户一个流畅的体验呢?那么就需要简单了解下Android的渲染机制: Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染,那么整个过程如果保证在16ms以内就能达到一个流畅的画面. 那么…
一.详解浏览器缓存机制 对于,如何说明缓存机制,在网络上找到了两张图,个人认为思路是比较清晰的.总结时,上图. 这里需要注意的有两点: 1.Last-Modified.Etag是响应头里的数据 2.If-None-Match.If-Modified-Since是请求头里的数据 Last-Modified/If-Modified-Since这种搭配,好像已经过时了.在测试时,就是关掉etag,并时间过期了,服务器也照样返回304. Etag/If-None-Match这种搭配,还挺好用的.测试时,…
atitit.浏览器缓存机制 and 微信浏览器防止缓存的设计 attilax 总结 1. 缓存的一些机制 1 1.1. http 304 1 1.2. 浏览器刷新的处理机制 1 1.3. Expires 2 1.4. Cache-Control 2 1.5. Last-Modified/E-tag 3 1.6. Etag 主要为了解决 Last-Modified 无法解决的一些问题. 4 2. 不同的页面打开方式产生的请求差别 5 3. html  meta法 5 4. http head 法…
转这篇文章是感觉可以在图片加载的时候,也使用这样的缓存策略   作者:吴秦出处:http://www.cnblogs.com/skynet/本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名吴秦(包含链接).   浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制(如: Expires: Cache-control等).但是也有非HTTP协议定义的缓存机制,如使用HTML Meta 标签,Web开发者可以在HTML页面的<head>节点中加入&…