Performance optimization သည် XML ဖိုင်များနှင့်ဆက်ဆံရာတွင် developer များ၏အဓိကအချက်ဖြစ်သည်။ အထူးသဖြင့် PHP တွင် XML_Parser_create_ns ကို php တွင်အသုံးပြုသောအခါ XML ဖိုင်များကို namespace များနှင့်ခွဲခြမ်းစိတ်ဖြာရန်, ဤဆောင်းပါးသည်ကြီးမားသော XML ဖိုင်များကိုပိုမိုထိရောက်စွာခွဲခြမ်းစိတ်ဖြာရန်ကူညီရန်သော့ချက်ကျသောစွမ်းဆောင်ရည်မြှင့်တင်ရေးဆိုင်ရာအကြံပြုချက်များကိုလေ့လာလိမ့်မည်။
ကြီးမားသော XML ဖိုင်များအတွက်ဖိုင်များကိုတစ်ပြိုင်နက်တည်းမှတ်ဉာဏ်ထဲသို့ 0 င်ရောက်ခြင်းကိုရှောင်ရှားရန်အရေးကြီးသည်။ PHP ၏ XML_Parser_Create_ns ဖိုင်တစ်ခုလုံးကိုတစ်ပြိုင်နက်တည်းတင်မည့်အစား formental parsing နှင့်အတူဖိုင်များကိုဆန့်ကျင်။ ခွဲခြမ်းစိတ်ဖြာရန်အသုံးပြုနိုင်သည်။ ဤချဉ်းကပ်မှုသည်မှတ်ဥာဏ်ခြေရာကိုသိသိသာသာလျော့နည်းစေသည်။
incremental parsing ၏နည်းလမ်းမှာ parsing စဉ်အတွင်း XML အကြောင်းအရာလိုင်းကိုလိုင်းဖြင့်ဖတ်ရန်ဖြစ်သည်။ ဤနည်းအားဖြင့်ဖိုင်တွဲတစ်ခုချင်းစီကိုခွဲခြမ်းစိတ်ဖြာနေစဉ်,
<span><span><span class="hljs-variable">$parser</span></span><span> = </span><span><span class="hljs-title function_ invoke__">xml_parser_create_ns</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">xml_set_element_handler</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>, </span><span><span class="hljs-string">"startElement"</span></span><span>, </span><span><span class="hljs-string">"endElement"</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">xml_set_character_data_handler</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>, </span><span><span class="hljs-string">"characterData"</span></span><span>);
</span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">"large_file.xml"</span></span><span>, </span><span><span class="hljs-string">"r"</span></span><span>);
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fread</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-number">4096</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">xml_parse</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>, </span><span><span class="hljs-variable">$data</span></span><span>, </span><span><span class="hljs-title function_ invoke__">feof</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>));
}
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">xml_parser_free</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>);
</span></span>ဤဥပမာတွင် file data များကိုအသုတ်တွင်ဖတ်ရန်အသုံးပြု သည် ။ ဤနည်းလမ်းသည်ဖိုင်တစ်ခုလုံးကိုတစ်ပြိုင်နက်တည်းမှတ်တမ်းတင်ခြင်းမှရှောင်ရှားသည်။
incremental ခွဲခြမ်းစိတ်ဖြာစဉ်အတွင်း အရှေ့တွင် ကြားခံအရွယ်အစားကိုချိန်ညှိနိုင်သည်။ မှန်ကန်သောကြားခံအရွယ်အစားကိုရွေးချယ်ခြင်းအားဖြင့်သင်သည် Memory အသုံးပြုမှုနှင့် i / o စွမ်းဆောင်ရည်ကိုချိန်ညှိနိုင်သည်။ သေးငယ်သောကြားခံများသည်ကျွန်ုပ် / o စစ်ဆင်ရေးများလွန်းနိုင်ပြီးကြီးမားသောကြားခံများသည်မှတ်ဥာဏ်အသုံးပြုမှုကို ဦး ဆောင်နိုင်သည်။
ပုံမှန်အားဖြင့် Buffer ကို 4KB နှင့် 8KB တို့အကြားကြားခံသတ်မှတ်ခြင်းသည်သင့်တော်သောရွေးချယ်မှုဖြစ်သည်။ ဖိုင်၏အမှန်တကယ်အရွယ်အစားနှင့်မှတ်ဉာဏ်ကန့်သတ်ချက်အပေါ် အခြေခံ. သင်ညှိနိုင်သည်။
XML_Parser_Create_ns သည် startelement , endelement နှင့် စတီဝေးတာ စသည့် XML parsing လုပ်ငန်းစဉ်အတွက် callback function များကိုသတ်မှတ်ရန်ခွင့်ပြုသည်။ များစွာသောဖိုင်များအတွက် callback လုပ်ဆောင်ချက်များသည်စွမ်းဆောင်ရည်ပြ problems နာများကိုဖြစ်ပေါ်စေနိုင်သည်, အထူးသဖြင့်ဖိုင်တွင်များစွာသောဒြပ်စင်များပါ 0 င်ပါက။ စွမ်းဆောင်ရည်တိုးတက်စေရန်အတွက်လိုအပ်သည့်အခါသာ callback function ကိုအသုံးပြုရန်အကြံပြုပါသည်။
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">startElement</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$parser</span></span></span><span>, </span><span><span class="hljs-variable">$name</span></span><span>, </span><span><span class="hljs-variable">$attrs</span></span><span>) {
</span><span><span class="hljs-comment">// သာလိုအပ်သောဒြပ်စင်လုပ်ငန်းများ၌နေကြသည်</span></span><span>
}
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">endElement</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$parser</span></span></span><span>, </span><span><span class="hljs-variable">$name</span></span><span>) {
</span><span><span class="hljs-comment">// သာလိုအပ်သောဒြပ်စင်လုပ်ငန်းများ၌နေကြသည်</span></span><span>
}
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">characterData</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$parser</span></span></span><span>, </span><span><span class="hljs-variable">$data</span></span><span>) {
</span><span><span class="hljs-comment">// ဇာတ်ကောင်အချက်အလက်များကိုလုပ်ငန်းစဉ်</span></span><span>
}
</span></span>callback function ၏ကွပ်မျက်မှုအကြောင်းအရာများကိုကန့်သတ်ခြင်းနှင့်မလိုအပ်သောတွက်ချက်မှုများကိုရှောင်ရှားခြင်းအားဖြင့်ခွဲခြမ်းစိတ်ဖြာခြင်းသည်သိသိသာသာတိုးတက်လာနိုင်သည်။
XML ဖိုင်များ၏ဖွဲ့စည်းပုံသည်ခွဲခြမ်းစိတ်ဖြာမှုစွမ်းဆောင်ရည်အပေါ်တိုက်ရိုက်သက်ရောက်မှုရှိသည်။ ကြီးမားသောဖိုင်များအတွက်, နက်ရှိုင်းသောအသိုက်သို့မဟုတ်ကြီးမားသောသတင်းအချက်အလက်အမြောက်အများကိုရှောင်ရှားရန်ကြိုးစားပါ။ ခွဲခြမ်းစိတ်ဖြာစဉ်ကာလအတွင်းလုပ်ငန်းများ၌လိုအပ်သော node များအရေအတွက်ကိုလျှော့ချနိုင်သည့်ပြားချပ်ချပ် xml ဖွဲ့စည်းတည်ဆောက်ပုံများကိုအသုံးပြုရန်ကြိုးစားပါ။
အကယ်. XML ဖိုင်သည်အလွန်ရှုပ်ထွေးလွန်းပါကဖိုင်ကိုကြိုတင်ပြင်ဆင်ခြင်း, မလိုအပ်သောဒြပ်စင်များသို့မဟုတ် attribute အချို့ကိုဖယ်ရှားခြင်း, ဖိုင်၏ဖွဲ့စည်းပုံကိုရိုးရှင်းအောင်ပြုလုပ်ခြင်း,
XML ဖိုင်များကိုခွဲခြမ်းစိတ်ဖြာသည့်အခါအမှားကိုင်တွယ်ခြင်းနှင့်သစ်ထုတ်လုပ်ခြင်းသည်စွမ်းဆောင်ရည်ဝန်ထုပ်ဝန်ပိုးဖြစ်နိုင်သည်။ အထူးသဖြင့်ဖိုင်ကြီးများနှင့်ဆက်ဆံရာတွင်အမှား (သို့) သတိပေးချက်တိုင်းသည်အပိုအရင်းအမြစ်များကိုစားသုံးသည်။ Batch-processed XML ဖိုင်များအတွက်အမှားကိုင်တွယ်ခြင်းနှင့်သစ်ထုတ်လုပ်ခြင်းကိုစွမ်းဆောင်ရည်အတွက်ခေတ္တပိတ်ထားနိုင်သည်။
<span><span><span class="hljs-title function_ invoke__">libxml_use_internal_errors</span></span><span>(</span><span><span class="hljs-literal">true</span></span><span>); </span><span><span class="hljs-comment">// အမှား output ကိုပိတ်ပါ</span></span><span>
</span><span><span class="hljs-variable">$parser</span></span><span> = </span><span><span class="hljs-title function_ invoke__">xml_parser_create_ns</span></span><span>();
</span></span>အမှားကိုင်တွယ်ပုံကိုပိတ်ခြင်းသည်ခွဲခြမ်းစိတ်ဖြာစဉ်အတွင်းဆိုးဝါးသောအမှားများကိုမထိခိုက်သော်လည်း, အမှားသေးငယ်သည့်အမှားတိုင်းကိုသစ်ထုတ်လုပ်ခြင်း,
အလွန်ကြီးမားသော XML ဖိုင်များကိုခွဲခြမ်းစိတ်ဖြာခြင်းသည်မှတ်ဥာဏ်မလုံလောက်ခြင်းကြောင့်ရိုးရာမှတ်ဉာဏ်အခြေပြုခွဲစိတ်မှုနည်းများကြောင့်ပျက်ကွက်နိုင်သည်။ ဤအချိန်တွင်သင်သည်မှတ်ဉာဏ်မြေပုံဖိုင်နည်းပညာကို အသုံးပြု. စဉ်းစားနိုင်သည်။ ဖိုင်များကိုမှတ်ဉာဏ်ထဲသို့မြေပုံရေးဆွဲခြင်းဖြင့် operating system သည် loading files များကိုအလိုအလျောက်စီမံခန့်ခွဲခြင်းအားဖြင့်စွမ်းဆောင်ရည်တိုးတက်ကောင်းမွန်စေသည်။
Memory Mapped ဖိုင်များကို fopen နှင့် file_get_contents ပေါင်းစပ်ခြင်းဖြင့်အကောင်အထည်ဖော်နိုင်သော်လည်း၎င်းသည် XML_Parser_create_ns ကို တိုက်ရိုက်မသက်ရောက်သော်လည်းကြီးမားသောဖိုင်များကိုဖတ်ရှုခြင်းအတွက်အလွန်ထိရောက်စေသည်။
အလွန်ကြီးမားသော XML ဖိုင်များအတွက်မူပြုပြင်ရန်အတွက်သေးငယ်သောဖိုင်များသို့မဟုတ်လုပ်ကွက်များစွာကိုခွဲခြားရန်လိုအပ်သည်။ XMLreader ကဲ့သို့သော streaming toods များကို segment ဖိုင်ကြီးများကို သုံး. သို့မဟုတ် files များကိုအပြိုင်ခွဲခြမ်းစိတ်ဖြာခြင်းအတွက်အမျိုးမျိုးသောအစိတ်အပိုင်းများကိုခွဲထုတ်နိုင်သည်။ ၎င်းသည်စွမ်းဆောင်ရည်ကိုတိုးတက်အောင်သာမကမပါမှတ်ဥာဏ်လျှံများကိုလည်းရှောင်ရှားနိုင်သည်။
<span><span><span class="hljs-variable">$reader</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">XMLReader</span></span><span>();
</span><span><span class="hljs-variable">$reader</span></span><span>-></span><span><span class="hljs-title function_ invoke__">open</span></span><span>(</span><span><span class="hljs-string">"large_file.xml"</span></span><span>);
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$reader</span></span><span>-></span><span><span class="hljs-title function_ invoke__">read</span></span><span>()) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$reader</span></span><span>->nodeType == (</span><span><span class="hljs-title class_">XMLReader</span></span><span>::</span><span><span class="hljs-variable constant_">ELEMENT</span></span><span>)) {
</span><span><span class="hljs-comment">// တစ်ခုချင်းစီကိုဒြပ်စင်လုပ်ငန်းစဉ်</span></span><span>
}
}
</span><span><span class="hljs-variable">$reader</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span></span>XMLREADER မှတဆင့် node မှ XML ဖိုင်များကို Node Node ကိုဖတ်ရှုခြင်းနှင့် parsing စွမ်းဆောင်ရည်ကိုတိုးတက်စေရန်နှင့် parsing စွမ်းဆောင်ရည်ကိုတိုးတက်စေရန်။
XML ဖိုင်များကိုခွဲခြမ်းစိတ်ဖြာသည့်အခါစွမ်းဆောင်ရည် optimization သည်အရေးကြီးသည်။ incremental ခွဲခြမ်းစိတ်ဖြာခြင်းအားဖြင့်ဆင်ခြင်တုံတရားဆိုင်ရာညှိနှိုင်းမှုအရွယ်အစားကိုကျင့်သုံးခြင်းအားဖြင့်, အလွန်ကြီးမားသော XML ဖိုင်များအတွက် Memory Mapposes ဖိုင်များနှင့် segment processing အသုံးပြုခြင်းသည်စွမ်းဆောင်ရည်ကိုပိုမိုကောင်းမွန်စေနိုင်သည်။ ဤဆောင်းပါးတွင် optimization အကြံပြုချက်များသည်သင့်အား XML ဖိုင်များကိုအမှန်တကယ်စီမံကိန်းများတွင်အောင်မြင်စွာလုပ်ဆောင်နိုင်ပြီးလျှောက်လွှာစွမ်းဆောင်ရည်နှင့်တည်ငြိမ်မှုကိုတိုးတက်စေရန်ကူညီနိုင်သည်ဟုကျွန်ုပ်မျှော်လင့်ပါသည်။