面试一半人答不上!Map和WeakMap的区别,一个null就暴露内存泄漏
在 ES6 问世这么多年之后, 于我进行面试之际, 询问「Map 与另一个事物的区别」, 大约有半数的候选人无法给出答案, 而能够清晰讲明白使用场景的候选人不到三成。蛮正常的, 使用频率不高, 然而应用恰当可以化解一部分“内存泄漏诊断之时令人极为头疼”的棘手问题今儿个探讨一下这两者之间的差别, 以及哪些情形下非得使用。表面差异能放什么、能不能遍历如果只看 API 文档几句话能说完// Map: 键可以是任意类型(对象、原始值)const map new Map();map进行设置, 将名为name的值设置为Tom。map.set(123, key);对map进行设置, 设置的内容为包含属性id且其值为1的对象, 同时设置的键为 key。.log(map.size); // 3for (const of map) {} // 可遍历map.((v, k) {}); // 可遍历// : 键必须是对象(或 ),不能是原始值const wm new ();wm.set({}, val);wm进行 , 设置操作 , 将值 , 关联到 , 名为foo的对象上。// wm.size // ,没这个属性// for (...of wm) // 不可遍历// wm.keys() / () // 没这些方法只有四个方法get、set、has、。乍一看上去, 它好像是 Map 的那种样子, 却又有所不同, 属于「弱化版」, 它没办法进行遍历操作, 对于键的类型存在限制, 甚至连个 size 这样的属性都没有。「那这个东西岂不是用起来更不方便? 这么难用? 」确实如此, 然而它的关键价值并非体现在 API 方面, 而是集中在内存管理身上。核心差异垃圾回收这是 存在的真正理由—— 持有的键是「弱引用」。使变量用户等于这样一个对象, 该对象具有一个属性为标识符1, 还有一个属性为名为汤姆的字符串。const map new Map();const wm new ();将用户设置为‘在 Map 里’, 放进 map 中, 进行设置操作。wm.set(user, 在 里);将外部变量设置为空, 期望该 user 对象能够被垃圾回收机制回收了, 此时 user 被置空。// 一段时间后(GC 跑过)Map持有user对象的强引用, 所以user对象不是那种已经不再存在的状态, 而是仍然处于活着的状态。在map之中存在的那条记录, 自始至终永远都不会消失不见, user对象永远不会遭受被回收垃圾的命运。// : user 对象可能被 GC 回收// 一旦回收,wm 里那条记录也自动消失写得直白点为何, 不可以进行遍历, 不存在size呢。是由于其内容随时都有可能被GC悄悄拿走, 你无法获取到一个「确定的快照」。要是能够进行遍历, 同一时刻所看到的内容都是不一样的——这种API是没办法实现的。真实场景一给对象挂额外数据但不想内存泄漏最为经典的那种场景, 你需要针对一堆 DOM 元素去挂载自定义数据, 然而却没办法确保哪一天这些元素会被弄掉。// 用 Map 的写法:DOM 移除了也回收不掉const new Map();(el, meta) {.set(el, meta); // el 永远活在 里// 后来某处(btn, { : 0 });btn.(); // DOM 移除了// 但 里那条记录还在,btn 对象永远不会被 GC// 累计起来就是内存泄漏// 用const new ();(el, meta) {.set(el, meta);const btn .(save);(btn, { : 0 });.btn.(); , 在 DOM 被移除之后 , 当 GC 运行一番的时候 , btn 就会被回收。// 里对应记录也自动消失我先前接手的项目存在这样一个问题, 监控埋点系统利用Map缓存了大量挂在DOM节点上的数据, 单页面应用用户频繁进出页面切换达几十次, 致使Map越来越大, 在相关面板能够看到DOM节点有几千个, 替换之后, 内存曲线当下直接变得平稳了。真实场景二私有属性的之前class不存在真正具有专属性质、不被外部随意访问修改的字段, 社区里存在一种由来已久的技巧, 即通过特定方式去进行模拟:// 私有数据存在 里,以 this 为 keyconst new ();class User {(name, ) {this.name name;.set(this, { }); // 真正的私有(input) {.get(this). input;常量u 新实例一个基于User用字符串tom和空字符串创建的对象。.log(u.); // ,外面拿不到.log(u.()); // true// u 被回收时, 里那条记录也消失,不泄漏此刻存在了 # 语法的此种用法已然并非很重要了, 然而当作理解的示例是极为经典的——「于外部维持私有数据, 且不会对对象自身的生命周期造成影响」。真实场景三函数结果缓存// 一个传对象参数的函数const cache new ();(obj) {要是缓存之中具有该对象, 那就从缓存里获取该对象。设有一个常量, 它源于, 假设是那种很贵的计算, 用对象的值乘以一百。cache.set(obj, );// 调用者不用 (obj) 之后,obj 该回收回收// cache 不会阻止哪怕运用了Map, 调用那边的对象始终存活于cache之中, 长跑服务会不断地增大内存, 要使cache与调用者的生命周期完美契合。几个使用上的坑首先, 原始值是不可以用来当作键的。这点对于新人而言是极易踩到的雷区。要是你打算缓存以字符串、或者数字作为内容的键所对应的结果, 那就必须得使用Map或者普通方式, 而绝对不能不使用第二, 要是不能对并非 bug 的那些, 有着“遍历所有挂载于 DOM 之上的元数据”这般念头的需求展开遍历, 那是满足不了的——并且也根本就不应当被满足, 这恰恰就是此 API 的总体设计意图所在。其三, 乃其兄弟也。用法相仿, 存储对象集合且不阻碍垃圾回收机制之操作。常见使用场景为, 标记某个对象是否已被处理, 却并不阻止该对象被回收处理。第四, 别只为了「优化内存」便毫无思考地去用。要是你真的有遍历需求、需要获取size、键为字符串——那就规规矩矩地使用Map。它是针对「键的生命周期由外部决定」这种特定情形所设计的。一句话记住Map 让数据等键 让数据陪键一起死。搞明白这一句, 后续所有运用场景判定都顺畅起来了。下回瞅见「内存当中挂着始终不释放的DOM」「弱引用cache」「私有属性」这类问题, 脑袋里头第一个蹦出来的应当是。WwW.HoUniAoHaO.CoM/pose/15878.htmlWwW.HoUniAoHaO.CoM/pose/15879.htmlWwW.HoUniAoHaO.CoM/pose/15880.htmlWwW.HoUniAoHaO.CoM/pose/15881.htmlWwW.HoUniAoHaO.CoM/pose/15882.htmlWwW.HoUniAoHaO.CoM/pose/15883.htmlWwW.HoUniAoHaO.CoM/pose/15884.htmlWwW.HoUniAoHaO.CoM/pose/15885.htmlWwW.HoUniAoHaO.CoM/pose/15886.htmlWwW.HoUniAoHaO.CoM/pose/15887.htmlWwW.HoUniAoHaO.CoM/pose/15888.htmlWwW.HoUniAoHaO.CoM/pose/15889.htmlWwW.HoUniAoHaO.CoM/pose/15890.htmlWwW.HoUniAoHaO.CoM/pose/15891.htmlWwW.HoUniAoHaO.CoM/pose/15892.htmlWwW.HoUniAoHaO.CoM/pose/15893.htmlWwW.HoUniAoHaO.CoM/pose/15894.htmlWwW.HoUniAoHaO.CoM/pose/15895.htmlWwW.HoUniAoHaO.CoM/pose/15896.htmlWwW.HoUniAoHaO.CoM/pose/15897.htmlWwW.HoUniAoHaO.CoM/pose/15898.htmlWwW.HoUniAoHaO.CoM/pose/15899.htmlWwW.HoUniAoHaO.CoM/pose/15900.htmlWwW.HoUniAoHaO.CoM/pose/15901.htmlWwW.HoUniAoHaO.CoM/pose/15902.htmlWwW.HoUniAoHaO.CoM/pose/15903.htmlWwW.HoUniAoHaO.CoM/pose/15904.htmlWwW.HoUniAoHaO.CoM/pose/15905.htmlWwW.HoUniAoHaO.CoM/pose/15906.htmlWwW.HoUniAoHaO.CoM/pose/15907.htmlWwW.HoUniAoHaO.CoM/pose/15908.htmlWwW.HoUniAoHaO.CoM/pose/15909.htmlWwW.HoUniAoHaO.CoM/pose/15910.htmlWwW.HoUniAoHaO.CoM/pose/15911.htmlWwW.HoUniAoHaO.CoM/pose/15912.htmlWwW.HoUniAoHaO.CoM/pose/15913.htmlWwW.HoUniAoHaO.CoM/pose/15914.htmlWwW.HoUniAoHaO.CoM/pose/15915.htmlWwW.HoUniAoHaO.CoM/pose/15916.htmlWwW.HoUniAoHaO.CoM/pose/15917.htmlWwW.HoUniAoHaO.CoM/pose/15918.htmlWwW.HoUniAoHaO.CoM/pose/15919.htmlWwW.HoUniAoHaO.CoM/pose/15920.htmlWwW.HoUniAoHaO.CoM/pose/15921.htmlWwW.HoUniAoHaO.CoM/pose/15922.htmlWwW.HoUniAoHaO.CoM/pose/15923.htmlWwW.HoUniAoHaO.CoM/pose/15924.htmlWwW.HoUniAoHaO.CoM/pose/15925.htmlWwW.HoUniAoHaO.CoM/pose/15926.htmlWwW.HoUniAoHaO.CoM/pose/15927.htmlWwW.HoUniAoHaO.CoM/pose/15928.htmlWwW.HoUniAoHaO.CoM/pose/15929.htmlWwW.HoUniAoHaO.CoM/pose/15930.htmlWwW.HoUniAoHaO.CoM/pose/15931.htmlWwW.HoUniAoHaO.CoM/pose/15932.htmlWwW.HoUniAoHaO.CoM/pose/15933.htmlWwW.HoUniAoHaO.CoM/pose/15934.htmlWwW.HoUniAoHaO.CoM/pose/15935.htmlWwW.HoUniAoHaO.CoM/pose/15936.htmlWwW.HoUniAoHaO.CoM/pose/15937.htmlWwW.HoUniAoHaO.CoM/pose/15938.htmlWwW.HoUniAoHaO.CoM/pose/15939.htmlWwW.HoUniAoHaO.CoM/pose/15940.htmlWwW.HoUniAoHaO.CoM/pose/15941.htmlWwW.HoUniAoHaO.CoM/pose/15942.htmlWwW.HoUniAoHaO.CoM/pose/15943.htmlWwW.HoUniAoHaO.CoM/pose/15944.htmlWwW.HoUniAoHaO.CoM/pose/15945.htmlWwW.HoUniAoHaO.CoM/pose/15946.htmlWwW.HoUniAoHaO.CoM/pose/15947.htmlWwW.HoUniAoHaO.CoM/pose/15948.htmlWwW.HoUniAoHaO.CoM/pose/15949.htmlWwW.HoUniAoHaO.CoM/pose/15950.htmlWwW.HoUniAoHaO.CoM/pose/15951.htmlWwW.HoUniAoHaO.CoM/pose/15952.htmlWwW.HoUniAoHaO.CoM/pose/15953.htmlWwW.HoUniAoHaO.CoM/pose/15954.htmlWwW.HoUniAoHaO.CoM/pose/15955.htmlWwW.HoUniAoHaO.CoM/pose/15956.htmlWwW.HoUniAoHaO.CoM/pose/15957.htmlWwW.HoUniAoHaO.CoM/pose/15958.htmlWwW.HoUniAoHaO.CoM/pose/15959.htmlWwW.HoUniAoHaO.CoM/pose/15960.htmlWwW.HoUniAoHaO.CoM/pose/15961.htmlWwW.HoUniAoHaO.CoM/pose/15962.htmlWwW.HoUniAoHaO.CoM/pose/15963.htmlWwW.HoUniAoHaO.CoM/pose/15964.htmlWwW.HoUniAoHaO.CoM/pose/15965.htmlWwW.HoUniAoHaO.CoM/pose/15966.htmlWwW.HoUniAoHaO.CoM/pose/15967.htmlWwW.HoUniAoHaO.CoM/pose/15968.htmlWwW.HoUniAoHaO.CoM/pose/15969.htmlWwW.HoUniAoHaO.CoM/pose/15970.htmlWwW.HoUniAoHaO.CoM/pose/15971.htmlWwW.HoUniAoHaO.CoM/pose/15972.htmlWwW.HoUniAoHaO.CoM/pose/15973.htmlWwW.HoUniAoHaO.CoM/pose/15974.htmlWwW.HoUniAoHaO.CoM/pose/15975.htmlWwW.HoUniAoHaO.CoM/pose/15976.htmlWwW.HoUniAoHaO.CoM/pose/15977.htmlWwW.HoUniAoHaO.CoM/pose/15978.htmlWwW.HoUniAoHaO.CoM/pose/15979.htmlWwW.HoUniAoHaO.CoM/pose/15980.htmlWwW.HoUniAoHaO.CoM/pose/15981.htmlWwW.HoUniAoHaO.CoM/pose/15982.htmlWwW.HoUniAoHaO.CoM/pose/15983.htmlWwW.HoUniAoHaO.CoM/pose/15984.htmlWwW.HoUniAoHaO.CoM/pose/15985.htmlWwW.HoUniAoHaO.CoM/pose/15986.htmlWwW.HoUniAoHaO.CoM/pose/15987.htmlWwW.HoUniAoHaO.CoM/pose/15988.htmlWwW.HoUniAoHaO.CoM/pose/15989.htmlWwW.HoUniAoHaO.CoM/pose/15990.htmlWwW.HoUniAoHaO.CoM/pose/15991.htmlWwW.HoUniAoHaO.CoM/pose/15992.htmlWwW.HoUniAoHaO.CoM/pose/15993.htmlWwW.HoUniAoHaO.CoM/pose/15994.htmlWwW.HoUniAoHaO.CoM/pose/15995.htmlWwW.HoUniAoHaO.CoM/pose/15996.htmlWwW.HoUniAoHaO.CoM/pose/15997.htmlWwW.HoUniAoHaO.CoM/pose/15998.htmlWwW.HoUniAoHaO.CoM/pose/15999.htmlWwW.HoUniAoHaO.CoM/pose/16000.htmlWwW.HoUniAoHaO.CoM/pose/16001.htmlWwW.HoUniAoHaO.CoM/pose/16002.htmlWwW.HoUniAoHaO.CoM/pose/16003.htmlWwW.HoUniAoHaO.CoM/pose/16004.htmlWwW.HoUniAoHaO.CoM/pose/16005.htmlWwW.HoUniAoHaO.CoM/pose/16006.htmlWwW.HoUniAoHaO.CoM/pose/16007.htmlWwW.HoUniAoHaO.CoM/pose/16008.htmlWwW.HoUniAoHaO.CoM/pose/16009.htmlWwW.HoUniAoHaO.CoM/pose/16010.htmlWwW.HoUniAoHaO.CoM/pose/16011.htmlWwW.HoUniAoHaO.CoM/pose/16012.htmlWwW.HoUniAoHaO.CoM/pose/16013.htmlWwW.HoUniAoHaO.CoM/pose/16014.htmlWwW.HoUniAoHaO.CoM/pose/16015.htmlWwW.HoUniAoHaO.CoM/pose/16016.htmlWwW.HoUniAoHaO.CoM/pose/16017.htmlWwW.HoUniAoHaO.CoM/pose/16018.htmlWwW.HoUniAoHaO.CoM/pose/16019.htmlWwW.HoUniAoHaO.CoM/pose/16020.htmlWwW.HoUniAoHaO.CoM/pose/16021.htmlWwW.HoUniAoHaO.CoM/pose/16022.htmlWwW.HoUniAoHaO.CoM/pose/16023.htmlWwW.HoUniAoHaO.CoM/pose/16024.htmlWwW.HoUniAoHaO.CoM/pose/16025.htmlWwW.HoUniAoHaO.CoM/pose/16026.htmlWwW.HoUniAoHaO.CoM/pose/16027.htmlWwW.HoUniAoHaO.CoM/pose/16028.htmlWwW.HoUniAoHaO.CoM/pose/16029.htmlWwW.HoUniAoHaO.CoM/pose/16030.htmlWwW.HoUniAoHaO.CoM/pose/16031.htmlWwW.HoUniAoHaO.CoM/pose/16032.htmlWwW.HoUniAoHaO.CoM/pose/16033.htmlWwW.HoUniAoHaO.CoM/pose/16034.htmlWwW.HoUniAoHaO.CoM/pose/16035.htmlWwW.HoUniAoHaO.CoM/pose/16036.htmlWwW.HoUniAoHaO.CoM/pose/16037.htmlWwW.HoUniAoHaO.CoM/pose/16038.htmlWwW.HoUniAoHaO.CoM/pose/16039.htmlWwW.HoUniAoHaO.CoM/pose/16040.htmlWwW.HoUniAoHaO.CoM/pose/16041.htmlWwW.HoUniAoHaO.CoM/pose/16042.htmlWwW.HoUniAoHaO.CoM/pose/16043.htmlWwW.HoUniAoHaO.CoM/pose/16044.htmlWwW.HoUniAoHaO.CoM/pose/16045.htmlWwW.HoUniAoHaO.CoM/pose/16046.htmlWwW.HoUniAoHaO.CoM/pose/16047.htmlWwW.HoUniAoHaO.CoM/pose/16048.htmlWwW.HoUniAoHaO.CoM/pose/16049.htmlWwW.HoUniAoHaO.CoM/pose/16050.htmlWwW.HoUniAoHaO.CoM/pose/16051.htmlWwW.HoUniAoHaO.CoM/pose/16052.htmlWwW.HoUniAoHaO.CoM/pose/16053.htmlWwW.HoUniAoHaO.CoM/pose/16054.htmlWwW.HoUniAoHaO.CoM/pose/16055.htmlWwW.HoUniAoHaO.CoM/pose/16056.htmlWwW.HoUniAoHaO.CoM/pose/16057.htmlWwW.HoUniAoHaO.CoM/pose/16058.htmlWwW.HoUniAoHaO.CoM/pose/16059.htmlWwW.HoUniAoHaO.CoM/pose/16060.htmlWwW.HoUniAoHaO.CoM/pose/16061.htmlWwW.HoUniAoHaO.CoM/pose/16062.htmlWwW.HoUniAoHaO.CoM/pose/16063.htmlWwW.HoUniAoHaO.CoM/pose/16064.htmlWwW.HoUniAoHaO.CoM/pose/16065.htmlWwW.HoUniAoHaO.CoM/pose/16066.htmlWwW.HoUniAoHaO.CoM/pose/16067.htmlWwW.HoUniAoHaO.CoM/pose/16068.htmlWwW.HoUniAoHaO.CoM/pose/16069.htmlWwW.HoUniAoHaO.CoM/pose/16070.htmlWwW.HoUniAoHaO.CoM/pose/16071.htmlWwW.HoUniAoHaO.CoM/pose/16072.htmlWwW.HoUniAoHaO.CoM/pose/16073.htmlWwW.HoUniAoHaO.CoM/pose/16074.htmlWwW.HoUniAoHaO.CoM/pose/16075.htmlWwW.HoUniAoHaO.CoM/pose/16076.htmlWwW.HoUniAoHaO.CoM/pose/16077.htmlWwW.HoUniAoHaO.CoM/pose/16078.htmlWwW.HoUniAoHaO.CoM/pose/16079.htmlWwW.HoUniAoHaO.CoM/pose/16080.htmlWwW.HoUniAoHaO.CoM/pose/16081.htmlWwW.HoUniAoHaO.CoM/pose/16082.htmlWwW.HoUniAoHaO.CoM/pose/16083.htmlWwW.HoUniAoHaO.CoM/pose/16084.htmlWwW.HoUniAoHaO.CoM/pose/16085.htmlWwW.HoUniAoHaO.CoM/pose/16086.htmlWwW.HoUniAoHaO.CoM/pose/16087.htmlWwW.HoUniAoHaO.CoM/pose/16088.htmlWwW.HoUniAoHaO.CoM/pose/16089.htmlWwW.HoUniAoHaO.CoM/pose/16090.htmlWwW.HoUniAoHaO.CoM/pose/16091.htmlWwW.HoUniAoHaO.CoM/pose/16092.htmlWwW.HoUniAoHaO.CoM/pose/16093.htmlWwW.HoUniAoHaO.CoM/pose/16094.htmlWwW.HoUniAoHaO.CoM/pose/16095.htmlWwW.HoUniAoHaO.CoM/pose/16096.htmlWwW.HoUniAoHaO.CoM/pose/16097.htmlWwW.HoUniAoHaO.CoM/pose/16098.htmlWwW.HoUniAoHaO.CoM/pose/16099.htmlWwW.HoUniAoHaO.CoM/pose/16100.htmlWwW.HoUniAoHaO.CoM/pose/16101.htmlWwW.HoUniAoHaO.CoM/pose/16102.htmlWwW.HoUniAoHaO.CoM/pose/16103.htmlWwW.HoUniAoHaO.CoM/pose/16104.htmlWwW.HoUniAoHaO.CoM/pose/16105.htmlWwW.HoUniAoHaO.CoM/pose/16106.htmlWwW.HoUniAoHaO.CoM/pose/16107.htmlWwW.HoUniAoHaO.CoM/pose/16108.htmlWwW.HoUniAoHaO.CoM/pose/16109.htmlWwW.HoUniAoHaO.CoM/pose/16110.htmlWwW.HoUniAoHaO.CoM/pose/16111.htmlWwW.HoUniAoHaO.CoM/pose/16112.htmlWwW.HoUniAoHaO.CoM/pose/16113.htmlWwW.HoUniAoHaO.CoM/pose/16114.htmlWwW.HoUniAoHaO.CoM/pose/16115.htmlWwW.HoUniAoHaO.CoM/pose/16116.htmlWwW.HoUniAoHaO.CoM/pose/16117.htmlWwW.HoUniAoHaO.CoM/pose/16118.htmlWwW.HoUniAoHaO.CoM/pose/16119.htmlWwW.HoUniAoHaO.CoM/pose/16120.htmlWwW.HoUniAoHaO.CoM/pose/16121.htmlWwW.HoUniAoHaO.CoM/pose/16122.htmlWwW.HoUniAoHaO.CoM/pose/16123.htmlWwW.HoUniAoHaO.CoM/pose/16124.htmlWwW.HoUniAoHaO.CoM/pose/16125.htmlWwW.HoUniAoHaO.CoM/pose/16126.htmlWwW.HoUniAoHaO.CoM/pose/16127.htmlWwW.HoUniAoHaO.CoM/pose/16128.htmlWwW.HoUniAoHaO.CoM/pose/16129.htmlWwW.HoUniAoHaO.CoM/pose/16130.htmlWwW.HoUniAoHaO.CoM/pose/16131.htmlWwW.HoUniAoHaO.CoM/pose/16132.htmlWwW.HoUniAoHaO.CoM/pose/16133.htmlWwW.HoUniAoHaO.CoM/pose/16134.htmlWwW.HoUniAoHaO.CoM/pose/16135.htmlWwW.HoUniAoHaO.CoM/pose/16136.htmlWwW.HoUniAoHaO.CoM/pose/16137.htmlWwW.HoUniAoHaO.CoM/pose/16138.htmlWwW.HoUniAoHaO.CoM/pose/16139.htmlWwW.HoUniAoHaO.CoM/pose/16140.htmlWwW.HoUniAoHaO.CoM/pose/16141.htmlWwW.HoUniAoHaO.CoM/pose/16142.htmlWwW.HoUniAoHaO.CoM/pose/16143.htmlWwW.HoUniAoHaO.CoM/pose/16144.htmlWwW.HoUniAoHaO.CoM/pose/16145.htmlWwW.HoUniAoHaO.CoM/pose/16146.htmlWwW.HoUniAoHaO.CoM/pose/16147.htmlWwW.HoUniAoHaO.CoM/pose/16148.htmlWwW.HoUniAoHaO.CoM/pose/16149.htmlWwW.HoUniAoHaO.CoM/pose/16150.htmlWwW.HoUniAoHaO.CoM/pose/16151.htmlWwW.HoUniAoHaO.CoM/pose/16152.htmlWwW.HoUniAoHaO.CoM/pose/16153.htmlWwW.HoUniAoHaO.CoM/pose/16154.htmlWwW.HoUniAoHaO.CoM/pose/16155.htmlWwW.HoUniAoHaO.CoM/pose/16156.htmlWwW.HoUniAoHaO.CoM/pose/16157.htmlWwW.HoUniAoHaO.CoM/pose/16158.htmlWwW.HoUniAoHaO.CoM/pose/16159.htmlWwW.HoUniAoHaO.CoM/pose/16160.htmlWwW.HoUniAoHaO.CoM/pose/16161.htmlWwW.HoUniAoHaO.CoM/pose/16162.htmlWwW.HoUniAoHaO.CoM/pose/16163.htmlWwW.HoUniAoHaO.CoM/pose/16164.htmlWwW.HoUniAoHaO.CoM/pose/16165.htmlWwW.HoUniAoHaO.CoM/pose/16166.htmlWwW.HoUniAoHaO.CoM/pose/16167.htmlWwW.HoUniAoHaO.CoM/pose/16168.htmlWwW.HoUniAoHaO.CoM/pose/16169.htmlWwW.HoUniAoHaO.CoM/pose/16170.htmlWwW.HoUniAoHaO.CoM/pose/16171.htmlWwW.HoUniAoHaO.CoM/pose/16172.htmlWwW.HoUniAoHaO.CoM/pose/16173.htmlWwW.HoUniAoHaO.CoM/pose/16174.htmlWwW.HoUniAoHaO.CoM/pose/16175.html