之前就有疑问的前端问题

hik
@Ta 02-06 21:09 583点击
document.write("<scr"+"ipt language=javascript src=http://l.yimg.com/d/lib/bc/bc_2.0.4.js></scr"+"ipt>");

实在他有点摸不着头脑,这真能加速??如下图来自某博客 https://www.orcode.com/question/327157_kbce2c.html

img

https://cway.top

回复列表(6)
  • @Ta / 02-06 21:28
    ????
  • @Ta / 02-06 21:36

    这个和速度无关系,这一段代码的重点是为什么要把script字符串给拆成拼接的方式,原因是浏览器的HTML解析器看见</script>的时候会把这个误认,而解析器又无法分辨这是HTML标记还是JS代码。

    你看的博客在乱说,不可信,即使真的有速度差异也是因为换了书写顺序/缓存等其它原因造成的。
    红米K30 Pro 变焦版

  • @Ta / 02-06 21:46

    @hik,楼上的解释是正确的,你可以参考这篇文章 《Using In A JavaScript Literal》 https://wls.wwco.com/blog/2007/04/25/using-script-in-a-javascript-literal/
    白日梦还是要做的

  • @Ta / 02-06 21:56

    你如果直接写:

    <script>
        alert("</script>");
    </script>
    

    浏览器会理解为:

    <script>        标签开始
    alert("            js代码
    </script>       标签结束
    ");                 普通文本
    </script>       标签结束(找不到开头的结束标签)
    

    为了避免这种问题我们把标签拆开来写:

    document.write("<scr"+"ipt language=javascript src=http://l.yimg.com/d/lib/bc/bc_2.0.4.js></scr"+"ipt>");
    

    也可以参考一下百度的动态插入 script 标签加载 js

    <script>
    var _hmt = _hmt || [];
    (function() {
      var hm = document.createElement("script");
      hm.src = "https://hm.baidu.com/hm.js?xxxxxxxxxxxxxx";
      var s = document.getElementsByTagName("script")[0]; 
      s.parentNode.insertBefore(hm, s);
    })();
    </script>
    

    白日梦还是要做的

  • hik
    @Ta / 02-06 22:30

    @Curtion,看来葫芦林每天都能学习新知识,@老虎会仰泳,你这样说也对,避免script标签混肴,之前我就想直接用script标签就行,干嘛还多此一举在外面包层document.write, 现在想应该是出于业务需要而进行判断加不加载这个js吧
    https://cway.top

  • @Ta / 02-06 22:46

    @hik,我说的就是和@Curtion,是同一个意思,就是多写了点代码。
    白日梦还是要做的

添加新回复
回复需要登录

[聊天-聊天灌水] 别人:搞懂了,应该是七牛云对空格支持不好