美文网首页
前端基础之浏览器(二)

前端基础之浏览器(二)

作者: 若雨千寻 | 来源:发表于2023-12-08 07:37 被阅读0次

    1.11 浏览器垃圾回收机制

    浏览器的 Javascript 具有自动垃圾回收机制(GC:Garbage Collecation),执行环境会负责管理代码执行过程中使用的内存

    原理:

    垃圾收集器会定期(周期性)找出那些不在继续使用的变量,然后释放其内存

    function fn1() {
        var obj = {name: 'hanzichi', age: 10};
    }
    function fn2() {
        var obj = {name:'hanzichi', age: 10};
        return obj;
    }
    var a = fn1();
    var b = fn2();
    /*
        首先定义了两个function,分别叫做fn1和fn2,当fn1被调用时,进入fn1的环境,会开辟一块内存存放对象{name: 'hanzichi', age: 10},而当调用结束后,出了fn1的环境,那么该块内存会被js引擎中的垃圾回收器自动释放;在fn2被调用的过程中,返回的对象被全局变量b所指向,所以该块内存并不会被释放
    */
    

    问题

    到底哪个变量是没有用的?

    解决

    所以垃圾收集器必须跟踪到底哪个变量没用,对于不再有用的变量打上标记,以备将来收回其内存。用于标记的无用变量的策略可能因实现而有所区别,通常

    情况下有两种实现方式:标记清除引用计数。引用计数不太常用,标记清除较为常用。

    标记清除

    function test(){
        var a = 10 ; //被标记 ,进入环境
        var b = 20 ; //被标记 ,进入环境
    }
    test(); //执行完毕 之后 a、b又被标离开环境,被回收。
    

    引用计数

    function test(){
    var a = {} ; //a的引用次数为0
    var b = a ; //a的引用次数加1,为1
    var c =a; //a的引用次数再加1,为2
    var b ={}; //a的引用次数减1,为1
    }
    test(); 
    

    GC****方案

    **1.** **基础方案**
    
    Javascript引擎基础GC方案是(simple GC):mark and sweep(标记清除),即:
    
    1. 遍历所有可访问的对象。

    2. 回收已不可访问的对象。

      2. GC的缺陷

      和其他语言一样,javascript的GC策略也无法避免一个问题:GC时,停止响应其他操作,这是为了安全考虑。而Javascript的GC在100ms甚至以上,对一般的应用还好,但对于JS游戏,动画对连贯性要求比较高的应用,就麻烦了。这就是新引擎需要优化的点:避免GC造成的长时间停止响应。

      3. GC优化策略

    3. 分代回收(Generation GC) 这个和Java回收策略思想是一致的,也是V8所主要采用的。目的是通过区分“临时”与“持久”对象;多回收“临时对象”区(young generation),少回收“持久对象”区(tenured generation),减少每次需遍历的对象,从而减少每次GC的耗时

    补充:对于tenured generation对象,有额外的开销:把它从young generation迁移到tenured generation,另外,如果被引用了,那引用的指向也需要修改。

    1. 增量GC 这个方案的思想很简单,就是“每次处理一点,下次再处理一点,如此类推”
        这种方案,虽然耗时短,但中断较多,带来了上下文切换频繁的问题。
    
        因为每种方案都其适用场景和缺点,因此在实际应用中,会根据实际情况选择方案。
    
        比如:低 (对象/s) 比率时,中断执行GC的频率,simple GC更低些;如果大量对象都是长期“存活”,则分代处理优势也不大。
    

    1.12 cookie

    1. cookie是什么?
    • cookie 是存储于访问者计算机中的变量。每当一台计算机通过浏览器来访问某个页面时,那么就可以通过 JavaScript 来创建和读取 cookie。

    • 实际上 cookie 是存于用户硬盘的一个文件,这个文件通常对应于一个域名,当浏览器再次访问这个域名时,便使这个cookie可用。因此,cookie可以跨越一个域名下的多个网页,但不能跨越多个域名使用。

    • 不同浏览器对 cookie 的实现也不一样。即保存在一个浏览器中的 cookie 到另外一个浏览器是 不能获取的。

    1. 怎么使用 cookie?

    语法

    document.cookie = "name=value;expires=evalue; path=pvalue; domain=dvalue;secure;”
    
    1. 注意事项
    • cookie可能被禁用。当用户非常注重个人隐私保护时,他很可能禁用浏览器的cookie功能
    • cookie是与浏览器相关的。这意味着即使访问的是同一个页面,不同浏览器之间所保存的cookie也是不能互相访问的
    • cookie可能被删除。因为每个cookie都是硬盘上的一个文件,因此很有可能被用户删除
    • cookie安全性不够高。所有的cookie都是以纯文本的形式记录于文件中,因此如果要保存用户名密码等信息时,最好事先经过加密处理
    • cookie 在保存时,只要后面保存的 name 相同,那么就会覆盖前面的 cookie,注意是完全覆盖,包括失效时间,pat
    1. cookie禁用

    sessionID通过cookie保存在客户端,如果将cookie禁用,必将对session的使用造成一定的影响

    解决办法:url重写

    1.13 调试工具

    a.谷歌浏览器

    1. Elements:可查看网页页面代码(修改只是当前使用有效),也可实时调试修改页面ccs代码样式。

    2. console:记录开发者开发过程中的日志信息,也可在里面写js代码。一般页面运行时js报错都是可以在这里看到反馈和定位bug原因及其位置。

    3. Sources:断点调试JS,可以查看程序代码执行的过程,断点调试对于每一个程序员来说可是很重要。

    4. Network:从发起网页页面请求开始,分析HTTP请求后得到的各个请求资源信息(“小编有时候就利用这下载一些网站不给下载的在线视频,比如教学视频”)。

    5. Timeline:记录并分析网站的生命周期所发生的各类事件,分析渲染js执行的每一个阶段。

    6. Application:记录网站加载的各个资源信息。

    7. Security:判断网页是否安全。

    8. Audits:对当前网页的网络利用及网页性能进行检测,并给出一些优化建议。

    b.其他

    postman

    Postman 是调试接口的最佳工具之一,使用 Postman,我们可以调整请求,分析响应和调试问题

    CSSLint

    CSSLint 是一个用来帮你找出 CSS 代码中问题的工具,它可做基本的语法检查以及使用一套预设的规则 来检查代码中的问题,规则是可以扩展的

    Sentry

    Sentry就是来帮我们解决这个问题的,它是是一个实时事件日志记录和聚合平台。它专门用于监视错误 和提取执行适当的事后操作所需的所有信息, 而无需使用标准用户反馈循环的任何麻烦

    BrowserStack

    BrowserStack 是一款提供网站浏览器兼容性测试的在线云端测试工具,从而开发测试人员不必再准备 很多虚拟机或者手机模拟器

    相关文章

      网友评论

          本文标题:前端基础之浏览器(二)

          本文链接:https://www.haomeiwen.com/subject/ieedgdtx.html