Rumah  >  Soal Jawab  >  teks badan

javascript - isu pengoptimuman prestasi


Bagaimana untuk mengoptimumkan kod ini?

Ini adalah pengoptimuman yang saya lakukan, nampaknya lebih perlahan. Tolong beri saya nasihat

高洛峰高洛峰2663 hari yang lalu962

membalas semua(6)saya akan balas

  • 習慣沉默

    習慣沉默2017-07-05 10:56:21

    Gunakan filter() 确实可以一句话搞定,但是,效率不高。其实可以用 find (rujuk MDN)

    function getServiceTypeName(code) {
        return serviceTypeList.find(val => val.name === code);
    }

    Malangnya, IE tidak menyokong find(), jadi terdapat Polyfill berhampiran penghujung dokumentasi MDN.

    Jika anda menggunakan peta untuk melaksanakannya, anda tidak perlu menggunakan Peta ES6, kerana objek asli menyokong kekunci jenis rentetan, tetapi tidak kira bagaimana ia dilaksanakan, penukaran peta ini seharusnya getServiceTypeName 之外进行。因为转换的过程比你写的 for ... of lebih memakan masa.

    function toMap(list) {
        return list.reduce((map, item) => {
            map.set(item.name, item);
            return map;
        }, new Map());
    }
    
    serviceTypeMap = toMap(serviceTypeList);
    
    function getServiceTypeName(code) {
        return serviceTypeMap.get(code);
    }

    balas
    0
  • 代言

    代言2017-07-05 10:56:21

    objToStrMap hanya perlu dimulakan sekali Anda memulakannya setiap kali dalam gelung, yang akan menjadi lebih perlahan.

    Arahan tambahan

    const objToStrMap=function (obj) {
        var myMap=new Map();
    
        obj.forEach(
            (item) => myMap.set(item.typeId, item.name)
        );
    
        return myMap;
    }
    var serviceTypeList=[
        {
            'typeId':1,
            'name':'first'
        },
        {
            'typeId':2,
            'name':'second'
        },
    ]
    function init(){
    
        serviceTypeList= objToStrMap(serviceTypeList)
    }
    init();//预先初始化,应用启动前或确保在getServiceTypeName服务调用前已经被初始化完成。
    
    getServiceTypeName=function (code) {
    
        return serviceTypeList.get(code);
    }
    console.log(getServiceTypeName(2));  //输出:second
    

    balas
    0
  • 为情所困

    为情所困2017-07-05 10:56:21

    ...

    Mula-mula tukarkannya menjadi struktur peta dengan pasangan nilai kunci nama:Id. Kemudian anda boleh terus menggunakan nama untuk mendapatkan id yang sepadan. Anda langsung tidak faham maksud kaedah yang dia beritahu.

    Mula-mula tukar tatasusunan jenis kepada struktur peta, dan kemudian dapatkannya melalui map.get(kod). Tidak perlu merentasi.

    balas
    0
  • 阿神

    阿神2017-07-05 10:56:21

    Dalam fungsi

    , anda boleh menulis seperti ini
    let result = serviceTypeList.map((val)=> val.typeId === code);
    retVal = result.name;

    balas
    0
  • 仅有的幸福

    仅有的幸福2017-07-05 10:56:21

    Hanya separuh baris kod

    serviceTypeList.filter(obj => obj.id==*code*)[0].name

    balas
    0
  • 女神的闺蜜爱上我

    女神的闺蜜爱上我2017-07-05 10:56:21

    Kendalian penapisan dalam gelung tidak perlahan.

    Apakah penyelesaian untuk menukar kepada peta perlu mengambil kira kos penukaran itu sendiri

    Pelaksanaan peta yang disertakan dengan beberapa bahasa menggunakan tatasusunan apabila koleksi kecil, menghapuskan keperluan untuk operasi kod cincang dan meningkatkan kecekapan

    balas
    0
  • Batalbalas