Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单html与Javascript生成的html?_Javascript_Html_Dom_Performance - Fatal编程技术网

简单html与Javascript生成的html?

简单html与Javascript生成的html?,javascript,html,dom,performance,Javascript,Html,Dom,Performance,在我的web应用程序中,我希望完全避免使用html,而只使用javascript来创建网页的dom树 以htmlSome text或使用javascript dom render(如下所示)的传统方式编写web内容更快的方法是:div.appendChild(document.createTextNode(“Some text”)?坚持使用传统的HTML。它不仅比使用javascript做任何事情都要快,而且更易于维护 除非另有令人信服的理由,否则请坚持使用直接的HTML,并使用javascri

在我的web应用程序中,我希望完全避免使用html,而只使用javascript来创建网页的dom树


以html
Some text
或使用javascript dom render(如下所示)的传统方式编写web内容更快的方法是:
div.appendChild(document.createTextNode(“Some text”)

坚持使用传统的HTML。它不仅比使用javascript做任何事情都要快,而且更易于维护


除非另有令人信服的理由,否则请坚持使用直接的HTML,并使用javascript实现应用程序中更具交互性的部分。

HTML由浏览器解析和生成,然后输入DOM。使用javascript逐块操作dom的开销更大


想象一下,如果你不得不从杂志上重新键入一篇文章。现在想象一下,如果每一句话都在新的一页上,你会这样做。虽然最终的结果是复制了一篇文章,但你必须花所有的时间翻页。

到目前为止,传统的方式更快,用户下载文件,文件就在那里,解析并完成

如果你用JS的方式在客户端构建页面,每次他们加载页面时


这只是构建页面的可怕方式,管理/更新/创建速度是正确性的第二个问题,也就是说,首先满足功能需求,然后在必要时加快速度(在某些地方,速度可能已经足够快了)


在这种情况下,决定使用静态标记还是使用JavaScript是一个谁在使用您的文档的问题——是否只有启用了JavaScript的用户?如果是这样,那也没什么大不了的。你需要考虑搜索引擎吗?残疾用户?没有完全JS支持的瘦客户端,或者禁用JS的偏执用户?在后一种情况下,使用JavaScript增强了语义标记,没有多余元素的干扰,如果你要通过JavaScript对HTML做很多修改,我建议使用模板库,比如

,我觉得有趣的是,你会考虑纯粹通过JavaScript创建一个文档。实际上,使用DOM和
document.createElement
创建元素比使用
.innerHTML
属性更快。此方法直接创建文档对象,而使用
innerHTML
需要解析器迭代HTML并创建元素

另一方面,使用Javascript而不是直接编写HTML需要对Javascript进行解析和执行,这会给HTML解析器带来额外的开销。

HTML(模板化)通常被认为是一种更直观、模块化和可维护的DOM操作方法

有几个地方可以让您开始:

jQuery模板引擎:

谷歌闭包模板

我过去已经尝试过为ajax聊天做一个100%javascript构建的组件。事实证明,它的可维护性较差,需要花更多的时间来编写代码,而且它的优势在于,即使非常困难,它也可能是一个可以从javascript-DOM方法中受益匪浅的项目


即使你认为有优势,也没有。坚持使用纯HTML。

传统方法会更快,因为浏览器只需下载、解释和显示。您建议的方法将导致浏览器必须下载、解释、更改*n次,然后显示

这就是渲染的范围

就可维护性而言,你正在制造一场噩梦。这是发展的关键。可维护性方面的噩梦数量与代码的“质量”成正比,IMHO。性能和优化应该排在可维护性之后。(当然也有例外,没有什么是黑白的)


HTML被创建为一种表达性语言。Javascript不是。在我看来,故事到此结束。

我认为编译javascript是一个很好的解决方案,可以创建快速的web应用程序。

2019 (可能正确答案在2010年是正确的)。以下是2019年基准测试的答案

生成带有嵌套的
div
的表,共500行,250k个表单元,每个表单元10个嵌套的div

<!-- Pure HTML by server -->
<html>
    <head></head>
    <body>
        <table>
        <?php 
        for($i = 0; $i < 500; ++$i) {
            echo '<tr>';
            for($j = 0; $j < 500; ++$j) {
                echo '<td><div><div><div><div><div><div><div><div><div><div>' . $i . '/' . $j . '</div></div></div></div></div></div></div></div></div></div></td>';
            }
            echo '</tr>';
        }
        ?>
        </table>
        <script>
            alert('finish');
        </script>
    </body>
</html>
在Ubuntu18上的ChromeV70上进行了测试。在这个测试用例中,JS生成的HTML大约快了400%(速度和下载大小将取决于HTML在实际用例中的大小)

结论
始终坚持正常的HTML有很多原因(通常是可读的/可维护的代码),除非你处理的是巨大的HTML,那么你可以考虑用js生成它。

,因为你和我一样,也做了类似的测试: 为了呈现包含100000000条记录的表的页面,我发现以下结果:

  • 静态html文件:文件大小32MB,页面加载时间2.8分钟
  • 静止的 内容缩小的html文件:文件大小12MB,页面加载时间 1.3分钟
  • JS生成的动态html文件:文件大小612字节(+713字节的JS),页面加载时间10.09秒

另请参见添加,强大的谷歌“不会索引”javascript生成的页面。因为它的网络爬虫忽略了javascript代码!因此,除非您的web门户将被私人/内部使用。不在谷歌上几乎等同于不在互联网上。(对于99%JS的网站来说)你应该解释一下为什么传统HTML比javascript快。“在我的web应用程序中,我想自满地避免使用HTML,只使用javascript来创建网页的dom树。”我很感兴趣;为什么要这样做?javascript方法还依赖于客户端启用javascript。他们存在,现在有一个坐在我旁边。此外,它需要大量的客户端操作,这通常比服务器慢。
<html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    </head>
    <body>
        <script>
            $(document).ready(function() {
                var html = '<table>';
                for(var i = 0; i < 500; ++i) {
                    html += '<tr>';
                    for(var j = 0; j < 500; ++j) {
                        html += '<td><div><div><div><div><div><div><div><div><div><div>' + i + '/' + j + '</div></div></div></div></div></div></div></div></div></div></td>';
                    }
                    html += '</tr>';
                }
                html += '</table>';

                $('body').html(html);

                alert('finish');
            });
        </script>
    </body>
</html>
                         | Download Size | Time 'til browser stops loading
--------------------------------------------------------------------------
HTML generated by server | 680,000 bytes | 00:01:48 
HTML generated by JS     |     570 bytes | 00:00:28