javascript - オブジェクト データを DOM ノードに変換するために作成したコードを最適化するにはどうすればよいですか?
三叔
三叔 2017-06-12 09:28:43
0
3
770

アイデアを簡単に紹介します。
オブジェクトに ajax を適用し、次に 子から親へ オブジェクトを順番に作成し、スタイルを設定し、レベルを追加します。
コードは次のようになります:

リーリー

こんなことばかり。 。 。最適化するにはどうすればよいですか?
ES6 のフロントエンドのサポートが理想的ではないため、文字列テンプレートが使用できず、フレームワークの追加も困難です。ハードウェアの場合はどうすればよいですか?
文字列を連結してから直接 innerHTML を使用する場合と比較して、このように記述する場合の欠点は何ですか?

三叔
三叔

全員に返信(3)
代言

首先,JS 人肉维护 DOM 的【过程式编程】在可维护性上是劣于模板风格的【声明式编程】的。考虑一行简单的 <p>xxx</p> 和一大坨 document.createElement('p')...,它们在可维护性上有天壤之别。

那么,怎样在没有 ES6 或各种框架语法糖的情况下,采用类似字符串模板的方式,将数据绑定到 HTML 呢?这里有一种 jQuery 作者曾经推荐的方案:

首先可以在 HTML 里搞个猥琐的 <script> 标签装模板,注意这个模板本身对 JS 并没有任何依赖,也可以把模板放在 <body> 外面。

<script id="my-template" type="text/x-custom-template">
    <p class="xxx">
        <p class="yyy">%name%</p>
        <p class="zzz">%value%</p>
    </p>
</script>

渲染数据时,直接取出模板中的 HTML 文本,用 JS 做正则替换即可:

var template = document.getElementById("my-template").innerHTML;
var html = template
            .replace(/%name%/, data['name'])
            .replace(/%value%/, data['value']);
// insert HTML...

参考我的这篇博客:
http://ewind.us/2016/js-rende...

当然,全量重置 innerHTML 是有性能风险的。但如果数据全量更新,那么即便是原生 JS 编写的代码,最后的 DOM 操作次数和直接重置 innerHTML 实际上是一样的。这时有几种思路:

  1. React 就是为了这类问题而生的。把 React 当做你的 innerHTML,随便全量重置,React 帮你 diff 然后按需更新 DOM,岂不美哉?

  2. Vue 通过依赖收集,直接能够找到变动的 DOM 所在位置并按需更新,连 diff 都不用,更是不知道高到哪里去了。

  3. 自己维护符合业务需求的 diff 算法(如只插入末尾)和 DOM 操作。也许是一个新轮子诞生的前奏呢(

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!