කේතීකරණයේදී ක්ෂුද්‍ර ප්‍රශස්තිකරණය වැදගත් ද?


182

මෑතකදී මා ඇයි දැයි දැන Stack පමාණය මත ප්රශ්න isset () strlen වඩා වැඩි වේගයකින් () විය තුළ , PHP . කියවිය හැකි කේතයේ වැදගත්කම සහ කේතයේ මයික්‍රෝ තත්පරවල කාර්ය සාධනය වැඩි දියුණු කිරීම සලකා බැලීම වටී ද යන්න පිළිබඳව මෙය ප්‍රශ්න මතු කළේය.

මගේ පියා විශ්‍රාමික ක්‍රමලේඛකයෙක් වන අතර මම ඔහුට ප්‍රතිචාර දැක්වුවෙමි. කෝඩරයක් ඔවුන්ගේ කේතයේ ක්‍රියාකාරිත්වය ක්ෂුද්‍ර මට්ටමින් පවා නොසලකන්නේ නම්, ඔවුන් හොඳ ක්‍රමලේඛකයන් නොවන බව ඔහුට විශ්වාසයි.

මට එතරම් විශ්වාස නැත - සමහර විට පරිගණක බලය වැඩිවීම යන්නෙන් අදහස් වන්නේ අප තවදුරටත් මෙවැනි ක්ෂුද්‍ර ක්‍රියාකාරීත්ව වැඩිදියුණු කිරීම් සලකා බැලිය යුතු නැති බව ද? සමහර විට මේ ආකාරයේ සලකා බැලීම සත්‍ය භාෂා කේතය ලියන පුද්ගලයින්ට විය හැකිද? (ඉහත නඩුවේ PHP හි).

පාරිසරික සාධක වැදගත් විය හැකිය - අන්තර්ජාලය ලෝකයේ ශක්තියෙන් 10% ක් පරිභෝජනය කරයි. මිලියන ගණනක් වෙබ් අඩවි වල ට්‍රිලියන ගණනක් අනුකරණය කරන විට මයික්‍රෝ තත්පර කිහිපයක් කේතය කොතරම් නාස්තියක්දැයි මම කල්පනා කරමි.

ක්‍රමලේඛනය පිළිබඳ කරුණු මත පදනම්ව පිළිතුරු දැන ගැනීමට මම කැමතියි.

කේතීකරණයේදී ක්ෂුද්‍ර ප්‍රශස්තිකරණය වැදගත් ද?

මගේ පෞද්ගලික පිළිතුරු 25 ක සාරාංශය, සැමට ස්තූතියි.

සමහර විට අප ක්ෂුද්‍ර ප්‍රශස්තිකරණය ගැන සැබවින්ම කරදර විය යුතුය, නමුත් ඉතා දුර්ලභ අවස්ථාවන්හිදී පමණි. බොහෝ අවස්ථාවන්හි විශ්වසනීයත්වය සහ කියවීමේ හැකියාව වඩා වැදගත් ය. කෙසේ වෙතත්, වරින් වර ක්ෂුද්‍ර ප්‍රශස්තිකරණය සලකා බැලීමෙන් හානියක් සිදු නොවේ. වැනි කේතීකරණයේදී පැහැදිලිවම නරක තේරීම් නොකිරීමට මූලික අවබෝධයක් අපට උපකාරී වේ

if (expensiveFunction() || counter < X)

විය යුතුයි

if (counter < X || expensiveFunction())

( @ Zidarsk8 වෙතින් උදාහරණය ) මෙය මිල අඩු කාර්යයක් විය හැකි අතර එම නිසා කේතය වෙනස් කිරීම ක්ෂුද්‍ර ප්‍රශස්තිකරණය වනු ඇත. එහෙත්, මූලික අවබෝධයකින් යුතුව, ඔබට එය අවශ්‍ය නොවනු ඇත, මන්ද ඔබ එය නිවැරදිව මුලින්ම ලියන බැවිනි.


123
ඔබේ පියාගේ උපදෙස් යල් පැන ගිය එකක් . එය කාර්ය සාධනය කොතරම් දියුණු කරනවාදැයි මම අසන්නේ නැත. මම අහන්නේ බාධකය කොහෙද කියලා. කේතයේ කොටසක සමස්ත වෙනසක් සිදු නොවන්නේ නම් එය වැඩි දියුණු කළත් කමක් නැත, ඔබේ මන්දගාමී සබැඳිය වේගය තීරණය කරයි. PHP හි මෙය ජාලයට ලියයි (ඔබට වෙනත් ආකාරයකින් IE මිනුම ඔප්පු කළ නොහැකි නම්); එය වඩා කියවිය හැකි කේතයක් ලිවීමට පරිවර්තනය කිරීම වඩා වැදගත් වේ.
මාටින් යෝක්

63
ප්රධාන වචනය සලකා බලන්නේ නම්, ඔහු වැරදි නැත. ඔබට ඒ ගැන යම් හෝඩුවාවක් තිබිය යුතුය.
ජෙෆෝ

38
සුප්‍රසිද්ධ නොමේරූ ප්‍රශස්තිකරණ උපුටා දැක්වීම තවම සඳහන් කර නැති නිසා මට කණගාටුයි : “ක්‍රමලේඛකයින් ඔවුන්ගේ වැඩසටහන් වල අවිධිමත් කොටස්වල වේගය ගැන සිතීමට හෝ කනස්සල්ලට පත්වීමට විශාල කාලයක් නාස්ති කරයි, කාර්යක්ෂමතාවයේ මෙම උත්සාහයන් ඇත්ත වශයෙන්ම ප්‍රබල negative ණාත්මක බවක් ඇත නිදොස් කිරීම සහ නඩත්තු කිරීම සලකා බැලීමේදී ඇතිවන බලපෑම. කුඩා කාර්යක්ෂමතාවයන් ගැන අප අමතක කළ යුතුය, 97% ක් පමණ කියන්න: නොමේරූ ප්‍රශස්තකරණය සියලු නපුරේ මුල වේ . එහෙත් එම තීරණාත්මක 3% තුළ අපගේ අවස්ථාවන් අප විසින් අත් නොහැරිය යුතුය.
තමරා විජ්මන්

14
"ලෝක ශක්තියෙන් 10%" සඳහා මූලාශ්‍රයක් සැපයිය හැකිද?
මයිකල් පාස්කු

18
coder does not consider performance in their code even at the micro level, they are not good programmersක්ෂුද්‍ර ප්‍රශස්තිකරණයට වඩා බෙහෙවින් වෙනස් ය. එය හොඳ කේතීකරණයක් පමණි.
woliveirajr

Answers:


90

මම දෙදෙනාම ඔබේ පියා සමඟ එකඟ වෙමි. කාර්ය සාධනය මුල් අවධියේදී සිතා බැලිය යුතුය, නමුත් ක්ෂුද්‍ර ප්‍රශස්තිකරණය ගැන සිතා බැලිය යුත්තේ කේතයේ කුඩා CPU- බැඳී ඇති කොටස්වල වැඩි කාලයක් වැය වන බව ඔබ සැබවින්ම දන්නේ නම් පමණි .

ක්ෂුද්‍ර ප්‍රශස්තිකරණයේ ඇති ගැටළුව නම් සාමාන්‍යයෙන් එය සිදු කරනු ලබන්නේ වැඩසටහන් ඇත්ත වශයෙන්ම අවශ්‍ය ප්‍රමාණයට වඩා වැඩි කාලයක් ගත කරන්නේ කෙසේද යන්න පිළිබඳ සංකල්පයක් නොමැතිව ය.

මෙම දැනුම ලැබෙන්නේ කාර්ය සාධනය සුසර කිරීමේ අත්දැකීම් වලින් වන අතර, මෙම උදාහරණයේ දී මෙන් , පැහැදිලිවම අකාර්යක්ෂමතාවයකින් තොරව පෙනෙන සරල වැඩසටහනක් රෝග විනිශ්චය සහ වේගවත් පියවර මාලාවක් හරහා ගෙන යනු ලැබේ, එය ආරම්භයට වඩා 43 ගුණයකින් වේගවත් වන තෙක්.

එයින් පෙන්නුම් කරන්නේ ඔබට ගැටළු ඇති තැන සැබවින්ම අනුමාන කිරීමට හෝ අනුමාන කිරීමට නොහැකි වීමයි. ඔබ අහඹු ලෙස විරාමයක් ලබා දෙන රෝග විනිශ්චය සිදු කරන්නේ නම්, සැලකිය යුතු කාලයකට වගකිව යුතු කේත රේඛා මනාපයෙන් නිරාවරණය වේ. ඔබ ඒවා දෙස බැලුවහොත්, ඔබට ආදේශක කේතයක් සොයා ගත හැකි අතර එමඟින් එම කාලය දළ වශයෙන් සමස්ත කාලය අඩු කරයි.

ඔබ නිවැරදි නොකළ වෙනත් දේවලට පෙර මෙන් වැඩි කාලයක් ගත වේ, නමුත් සමස්ත කාලය අඩු වී ඇති බැවින්, දැන් ඒවා විශාල ප්‍රමාණයක් ගනී, එබැවින් ඔබ නැවත සියල්ල කළහොත් එම භාගයද ඉවත් කළ හැකිය. ඔබ මෙය නැවත නැවත සිදු කරන්නේ නම්, කිසිදු ක්ෂුද්‍ර ප්‍රශස්තිකරණයකින් තොරව ඔබට විශාල වේගවත් කිරීම් ලබා ගත හැක්කේ එලෙසිනි .

ඒ ආකාරයේ අත්දැකීම් වලින් පසුව, ඔබ නව ක්‍රමලේඛන ගැටළු වලට එළඹෙන විට, මුලින් එවැනි අකාර්යක්ෂමතාවයන්ට තුඩු දෙන සැලසුම් ප්‍රවේශයන් ඔබ හඳුනා ගනී. මගේ අත්දැකීම් අනුව, එය පැමිණෙන්නේ දත්ත ව්‍යුහය ඕනෑවට වඩා සැලසුම් කිරීම, සාමාන්‍යකරණය නොකරන ලද දත්ත ව්‍යුහය, දැනුම්දීම් මත විශාල ලෙස රඳා පැවතීම, ඒ ආකාරයේ දෙයක්.


121

ක්ෂුද්‍ර ප්‍රශස්තිකරණය වැදගත් වන්නේ සංඛ්‍යා එය යැයි පැවසුවහොත් පමණි.

කාර්ය සාධනය සේවාදායකයාට හෝ පරිශීලකයාට කිසියම් ගැටළුවක් නම්, ඔබ විසින් වර්ධනය කරනු ලබන අවශ්‍යතාවන්ට කාර්ය සාධන දත්තවල යම් පිරිවිතරයක් තිබිය යුතුය. ඔබ මෘදුකාංග සංවර්ධනය කරමින් සිටින විට, මෙම අවශ්‍යතාවයන්ට එරෙහිව ඔබේ පද්ධතියේ ක්‍රියාකාරිත්වය පරීක්ෂා කළ යුතුය. ඔබ කාර්ය සාධන අවශ්‍යතා සපුරාලන්නේ නැත්නම්, ඔබ ඔබේ කේත පදනම පැතිකඩ කර කාර්ය සාධන අවශ්‍යතා කරා ළඟා වීමට අවශ්‍ය පරිදි ප්‍රශස්තිකරණය කළ යුතුය. ඔබ අවම අවශ්‍ය කාර්ය සාධනය තුළට ගිය පසු, පද්ධතියෙන් පිටත තවත් කාර්ය සාධනයක් මිරිකීමට අවශ්‍ය නැත, විශේෂයෙන් ඔබ කේතයේ කියවීමේ හැකියාව සහ නඩත්තු කිරීමේ හැකියාව තවදුරටත් අඩපණ කිරීමට යන්නේ නම් (මගේ අත්දැකීම් අනුව, ඉහළ ප්‍රශස්තිකරණය කළ කේතය අඩු කියවිය හැකි සහ නඩත්තු කළ හැකි නමුත් සෑම විටම නොවේ). පද්ධතියේ අනෙකුත් ගුණාත්මක ගුණාංග පිරිහීමකින් තොරව ඔබට අතිරේක කාර්ය සාධන වාසි ලබා ගත හැකි නම්,

කෙසේ වෙතත්, කාර්ය සාධනය අතිශයින්ම වැදගත් වන අවස්ථා තිබේ. මම ප්‍රධාන වශයෙන් සිතන්නේ තත්‍ය කාලීන පද්ධති සහ කාවැද්දූ පද්ධති ගැන ය. තත්‍ය කාලීන පද්ධති වලදී, මෙහෙයුම් අනුපිළිවෙල වෙනස් කිරීම නිසි ලෙස ක්‍රියාත්මක කිරීම සඳහා අවශ්‍ය වන දැඩි කාලසීමාවන් සපුරාලීම කෙරෙහි විශාල බලපෑමක් ඇති කළ හැකිය, සමහර විට ගණනය කිරීම්වල ප්‍රති results ල කෙරෙහි බලපෑම් ඇති කරයි. කාවැද්දූ පද්ධති වලදී, ඔබට සාමාන්‍යයෙන් සීමිත මතකයක්, CPU බලය සහ බලය ඇත (බැටරි බලයේ මෙන්), එබැවින් ඔබට ඔබේ ද්විමය ප්‍රමාණය අඩු කර පද්ධති ආයු කාලය උපරිම කිරීම සඳහා ගණනය කිරීම් ගණන අඩු කළ යුතුය.


අනෙක් අතට, මන්දගාමී එදිරිව වේගවත් ශ්‍රිතයක් භාවිතා කිරීම අතර ගැටළුවක් තිබේ නම්, මන්දගාමී ශ්‍රිතය භාවිතා කිරීමට කිසිදු හේතුවක් නැත - නිකුත් කිරීමේදී මෙහි දී මෙන්.
මාව්රික්

7
Av මැව්රික් ඒක ඇත්ත. ඔබට X සහ Y යන ශ්‍රිත දෙකක් තිබේ නම් සහ Y X ට වඩා වේගවත් වේ (අවම වශයෙන් ඔබේ විශේෂිත කොන්දේසි සඳහා), කේතය තවමත් කියවිය හැකි සහ නඩත්තු කළ හැකි නම් Y භාවිතා නොකිරීමට හේතුවක් නැත. නමුත් ඔබ Y ගැන නොදන්නේ නම් සහ X වෙනුවට Y භාවිතා කිරීම සඳහා ප්‍රතික්‍රියාකාරක කේතයක් අවශ්‍ය නම් සහ කාර්ය සාධනය (එම කේත ඛණ්ඩයේ) ​​ගැටළුවක් නොවේ නම්, එම වෙනස සිදු කිරීමට හේතුවක් නැත. ඒ සියල්ල වෙළඳාම පිළිබඳ වේ - කාර්ය සාධනය, කාලය, පිරිවැය, උත්සාහය, කියවීමේ හැකියාව / නඩත්තු කිරීම සහ යනාදිය.
තෝමස් ඕවන්ස්

2
මම මුළු හදින්ම එකඟ වෙමි, මට අවශ්‍ය වූයේ එය ක්ෂුද්‍ර ප්‍රශස්තිකරණය සම්බන්ධයෙන් ගත් විටය - කියවීමේ හැකියාව / වේලාව අනුව ඔබට කිසිදු වියදමක් දැරීමට සිදු නොවේ නම්, එය කරන්න. එසේ නොමැතිනම් එසේ නොකරන්න.
මාව්රික්

+1 ඉතා ප්‍රශස්තකරණය කළ කේතය අඩු කියවිය හැකි සහ නඩත්තු කළ හැකි ය ... නමුත් සෑම විටම නොවේ.
බොස්

කාර්ය සාධනය වැදගත් වන තවත් අවස්ථා: (1) සූදු; (2) විශාල දත්ත ප්‍රමාණයක්; (3) අධික රථවාහන වෙබ් අඩවිය; (4) ඉතා සංකීර්ණ UI එකක ප්‍රතිචාර දැක්වීම; (5) වෛරස් පරීක්ෂාව වැනි පසුබිමක ක්‍රියාත්මක විය යුතු සේවාව; (6) මුදල්; (7) ස්මාර්ට් ජංගම දුරකථනය; සහ යනාදි. එය ආර්ටීඑස් සහ කාවැද්දූ පද්ධති වැනි එසෝටරික් අවස්ථාවන්ට පමණක් සීමා නොවේ.
රෙක්ස් කර්ර්

103

කෙනෙක් ගැන ඉල්ලන විට ප්රශස්තිකරණය , මම මතක් කරනවා උපුටා සිට මයිකල් ඒ ජැක්සන්

වැඩසටහන් ප්‍රශස්තිකරණයේ පළමු රීතිය: එය නොකරන්න.

වැඩසටහන් ප්‍රශස්තිකරණයේ දෙවන රීතිය (විශේෂ experts යින් සඳහා පමණි!): තවම එය නොකරන්න .

විකිපීඩියාවෙන් උපුටා ගැනීම බ්‍රිතාන්‍ය ඉංග්‍රීසි සඳහා නිවැරදි කරන ලදි. * 8 ')

දෙවන රීතියට ගම්‍ය වන්නේ ඔබේ කේතය පැතිකඩ කිරීම සහ වෙනසක් ඇති කරන දේවල් ප්‍රශස්තිකරණය කිරීම සඳහා කාලය ගත කිරීමයි.

එකලස් කිරීමේදී වැඩසටහන් කරන විට, ඔබේ පියාගේ ප්‍රකාශය නිවැරදි විය. නමුත් එය මේ දිනවල බොහෝ අය වැඩසටහන් වලට වඩා ලෝහයට වඩා සමීප ය. අද වන විට ඔබම ප්‍රශස්තිකරණය කිරීමට උත්සාහ කිරීම (පැතිකඩකින් තොරව) ඔබේ කේතය මන්දගාමී වීමට හේතු විය හැක , ඔබ වඩාත් පොදු ආකාරයකින් යමක් කළා නම්, පොදු ක්‍රමය නවීන JIT සම්පාදකයින් විසින් ප්‍රශස්තිකරණය කිරීමට වැඩි ඉඩක් ඇති හෙයින් .

C හි පවා ඔබ සම්පාදකයාට වඩා කේතයේ කොටසක් ප්‍රශස්තිකරණය කරන්නේ කෙසේද යන්න ගැන දැන ගැනීමට ප්‍රශස්තිකරණයෙන් හොඳ විය යුතුය.

සෑම ක්‍රමලේඛකයෙකුම මතකය ගැන දැනගත යුතු දේ ගැන උල්රිච් ඩ්‍රෙපර් සිය විශිෂ් paper පුවත්පතේ කථා කරන දේ ගැන ඔබ නොදන්නේ නම්, ඔබ බොහෝ විට පරාජිතයෙකු විය හැකි අතර ඔබම ප්‍රශස්ත වීමට උත්සාහ කරයි. කෙසේ වෙතත්, පුවත්පත් මාතෘකාවට පටහැනිව (ඇත්ත වශයෙන්ම එය ඩේවිඩ් ගෝල්ඩ්බර්ග්ගේ සමානවම අපූරු ගෞරවයක් වන අතර සෑම පරිගණක විද්‍යා ist යෙක්ම පාවෙන ලක්ෂ්‍ය අංක ගණිතය ගැන දැනගත යුතුය ) මෙම මට්ටමේ අවබෝධයක් නොමැති වීමෙන් ඔබ හොඳ ක්‍රමලේඛකයෙකු වීම නවත්වන්නේ නැත, වෙනස් ආකාරයේ ක්‍රමලේඛකයා.

isset()PHPstrlen() හි එදිරිව

මම PHP ගැන නොදනිමි, එබැවින් කුමක් isset()කිරීමට අදහස් කරන්නේද යන්න පැහැදිලිව පෙනෙන්නට නැත . මට එය සන්දර්භයෙන් අනුමාන කළ හැකිය, නමුත් මෙයින් අදහස් කරන්නේ එය නවක PHP ක්‍රමලේඛකයන්ට සමානව අපැහැදිලි වනු ඇති අතර වඩාත් පළපුරුදු ක්‍රමලේඛකයින් දෙවරක් ගැනීමට පවා හේතු විය හැකි බවයි. මේ නොලබයි සෙන්දගශයෙහි නඩත්තු නපුරු සිහිනයක් බවට පත් කළ හැකි භාෂා භාවිතය.

එපමණක් නොව, isset()සෑම විටම වඩා කාර්යක්ෂම වනු ඇති බවට සහතිකයක් නොමැත , එය දැන් වඩා කාර්යක්ෂම බැවින්. දැන් ප්‍රශස්තිකරණය ඊළඟ වසරේ හෝ අවුරුදු 10 කින් ප්‍රශස්තිකරණය නොවිය හැකිය. CPUs, පද්ධති, සම්පාදකයින් කාලයත් සමඟ වැඩිදියුණු වී වෙනස් වේ. PHP හි ක්‍රියාකාරීත්වය strlen()ගැටළුවක් නම්, අනාගතයේදී PHP වෙනස් වනු ඇත, එවිට කේතය නැවත වරක් ප්‍රශස්තිකරණය කිරීම සඳහා සියලුම නිකුත් කිරීම් () ප්‍රශස්තිකරණ ඉවත් කිරීමට අවශ්‍ය වනු ඇත.

සෑම ප්‍රශස්තිකරණයකටම අනාගත ප්‍රති-ප්‍රශස්තිකරණයක් බවට පත්වීමේ විභවයක් ඇත , එබැවින් හැකි තරම් කේත සුවඳක් ලෙස සැලකිය යුතුය.

පුද්ගලික අත්දැකීම් වලින් උදාහරණයක්

එවැනි ප්‍රති-ප්‍රශස්තිකරණයකට උදාහරණයක් ලෙස , වරක් මට පෝරමයේ කේත වලින් පිරුණු විශාල කේත පදනමක් සනීපාරක්ෂක කිරීමට if x==0 z=0 else z=x*yසිදු වූයේ පාවෙන ලක්ෂ්‍ය ගුණ කිරීම සෑම විටම ශාඛාවකට වඩා මිල අධික වනු ඇතැයි යමෙකු උපකල්පනය කර ඇති බැවිනි. මුල් ඉලක්ක ගෘහ නිර්මාණ ශිල්පය මත මෙම ප්‍රශස්තිකරණය මඟින් කේතය විශාලත්වයේ අනුපිළිවෙලක් වේගයෙන් ධාවනය කළ නමුත් කාලය වෙනස් වේ.

වඩාත් නවීන CPU මත මෙම කේතය භාවිතා කිරීමට අප උත්සාහ කළ විට එය ඉතා නල ලෙස ක්‍රියාත්මක විය - මෙම සෑම ප්‍රකාශයක්ම නල මාර්ගයක් ගලා යාමට හේතු වේ. මෙම සියලු කේත රේඛා සරල z=x*yකිරීම මඟින් වැඩසටහන නව ගෘහ නිර්මාණ ශිල්පය මත විශාලත්වයේ අනුපිළිවෙලක් වේගයෙන් ධාවනය කරවීම , ප්‍රති-ප්‍රශස්තිකරණයෙන් අහිමි වූ ක්‍රියාකාරිත්වය යථා තත්වයට පත් කිරීම .

අද අපට සාමාන්‍යයෙන් ප්‍රශස්තිකරණය කිරීමට ඇති ගැටළු මීට වසර 20 ක් හෝ 10 කට පෙර පවා අපට ප්‍රශස්තිකරණය කිරීමට තිබූ ගැටළු වලට වඩා බෙහෙවින් වෙනස් ය.

එවිට අප දැන් වැඩි ඉඩක් ඇත්තේ CPU මට්ටමින් නල සමේ, ශාඛා mispredictions සහ හැඹිලි වදින්නේ නැහැ ගැන කරදර කිරීමට, නමුත් අගුල් සහ interprocess සන්නිවේදන වෙමින්, එක් කාල වක්රයක් බොහෝ වැඩ කටයුතු කිරීම පිළිබඳව තමා කනස්සල්ලට බොහෝ අපි බහු යන්න ලෙස වඩාත් වැදගත් ක්‍රියාවලිය සහ බහු ප්‍රොසෙසර් ගෘහ නිර්මාණ. ඩ්‍රෙපර්ගේ පුවත්පතට මෙම ගැටළු බොහොමයක් අවබෝධ කර ගැනීමට උපකාරී වේ.


3
පයිප්ලයින් ෆ්ලෂ් සහ හැඹිලි මිස් යනු ඔබට වළක්වා ගැනීමට අවශ්‍ය දෙයයි: D ඔවුන්ට භයානක පිරිවැයක් ඇත. නමුත් කේතයේ කොටස් මත පමණක් ඒවා බොහෝ වාර ගණනක් උද්දීපනය කරයි.
deadalnix

7
මම එකතු කරන එක් දෙයක් නම්, සම්පාදකයින් බොහෝ දුරක් පැමිණ ඇති අතර ඔබ වෙනුවෙන් බොහෝ දේ ප්‍රශස්ත කරනු ඇත. AFAIK, ඔවුන් උපක්‍රමශීලී දේවලට වඩා පිරිසිදු, කියවිය හැකි කේතයක් ප්‍රශස්තිකරණය කරයි.
බෙකස්

3
කාලය නාස්ති කළ ක්ෂුද්‍ර ප්‍රශස්තිකරණය පිළිබඳ සැබෑ උදාහරණයක් සැපයීම සඳහා +1 - සහ මයිකල් ජැක්සන් ක්‍රමලේඛකයෙකු බව හෙළි කිරීම.
බොස්

1
+1 උදාහරණයක් ලෙස. ඔබ සම්පාදකයාට සුළු පරිවර්තනයන් තැබිය යුත්තේ මන්දැයි එය මනාව විදහා දක්වයි.
back2dos

1
ExRex Kerr> උදාහරණයේ දී, පිරිවැය ලැබෙන්නේ අතු බෙදීමෙන් වන අතර එමඟින් CPU හි නල මාර්ගය ගලා යයි. පාවෙන ලක්ෂ්‍ය ගුණ කිරීම ද මිල අධිකය. වඩා වියදම්කාරී දෙය රඳා පවතින්නේ කේතය ක්‍රියාත්මක වන CPU හි FPU සහ නල මාර්ග දිග මත ය. මෙම කේතය වර්තමාන CPU වලට වඩා කෙටි නල මාර්ගයක් සහ අඩු කාර්යක්ෂම FPU ඇති පැරණි CPU මත වේගයෙන් ධාවනය වීම ගැන මම පුදුම නොවෙමි.
deadalnix

84
  1. කේතය ලියන්න, එය පිරිසිදු, සංක්ෂිප්ත, සරල සහ ස්වයං පැහැදිලි කිරීමකි.
  2. බාධක හඳුනා ගැනීම සඳහා කාර්ය සාධන පරීක්ෂණ කරන්න.
  3. විවේචනාත්මක කොටස් ප්‍රශස්ත කරන්න.

රීතියක් ලෙස: ඔබේ කේතයෙන් 95% ක්ම 5% ක් ධාවනය වේ. ඔබේ කේතය පැතිකඩ / මිණුම් සලකුණු කිරීමට පෙර ප්‍රශස්තිකරණය කිරීමේ තේරුමක් නැති අතර 95% ක්ම ක්‍රියාත්මක වන 5% මොනවාදැයි බලන්න.

සෑම මෝඩයෙකුටම ක්ෂුද්‍ර ප්‍රශස්තිකරණය කළ හැකි අතර ඕනෑම හොඳ සම්පාදකයෙකු / ධාවන කාලයක් ඔබ වෙනුවෙන් මෙය කරනු ඇත.
හොඳ කේතයක් ප්‍රශස්ත කිරීම සුළුපටු නොවේ. ප්‍රශස්තිකරණය කළ කේතයක් ලිවීමෙන් පසුව එය හොඳ කිරීමට උත්සාහ කිරීම වෙහෙසකර හා නරකම අවස්ථාවේ තිරසාර නොවේ.

ඔබ කාර්ය සාධනය ගැන බැරෑරුම් ලෙස සැලකිලිමත් වන්නේ නම්, කාර්ය සාධන විවේචනාත්මක කේතය සඳහා PHP භාවිතා නොකරන්න. බාධක සොයාගෙන ඒවා C දිගු සමඟ නැවත ලියන්න. අපැහැදිලි තත්වයෙන් ඔබ්බට ඔබගේ PHP කේතය ක්ෂුද්‍ර ප්‍රශස්තිකරණය කිරීමෙන් පවා ඔබට එතරම් වේගයක් නොලැබෙනු ඇත.

පෞද්ගලිකව, මම ක්‍රමලේඛනය ආරම්භ කරන විට මයික්‍රෝ ප්‍රශස්තිකරණය කිරීමට බොහෝ කැමැත්තෙමි. එය පැහැදිලිව පෙනෙන බැවිනි. මන්ද එය ඔබට ඉක්මනින් විපාක දෙන බැවිනි. ඔබ වැදගත් තීරණ ගත යුතු නැති නිසා. එය කල් දැමීමේ පරිපූර්ණ මාධ්‍යයකි. මෘදුකාංග සංවර්ධනයේ ඉතා වැදගත් කොටස් වලින් පලා යාමට එය ඔබට ඉඩ සලසයි: පරිමාණය කළ හැකි, නම්‍යශීලී, විස්තීරණ, ශක්තිමත් පද්ධති සැලසුම් කිරීම.


2
මට ඇති හොඳම පිළිතුර, කැපී පෙනෙන ලෙස, බග්සිලා සංවර්ධකගේ මාර්ගෝපදේශයෙහි සොයාගත හැකි විය: “ඔබ කියවීමට උත්සාහ කරනවා වෙනුවට දක්ෂ වීමට උත්සාහ කරන්නේ නම්, සමහර විට ඔබ උත්සාහ කරන්නේ දේවල්“ වේගවත් ”කිරීමටද? එසේ නම්, මතක තබා ගන්න. : ගැටලුවක් පවතින බව දැන ගැනීමට පෙර එය විසඳා නොගන්න.ඔබගේ කේතය මන්දගාමී බව ඔබ නොදන්නේ නම් (සත්‍ය, සවිස්තරාත්මක පරීක්ෂණ මගින්), එය “වේගවත්” කිරීම ගැන කරදර නොවන්න. මෙය පමණක් සීමා නොවේ ප්‍රශස්තිකරණය - බොහෝ ක්‍රමලේඛකයින් කිසිවෙකු මෙතෙක් අත්විඳ නැති ගැටලු නිරාකරණය කරයි. එසේ නොකරන්න. bugzilla.org/docs/developer.html#general
මාර්කෝ

7
මම සාමාන්‍යයෙන් එකඟ වෙමි - එක් පේළියක් හැර, "සෑම මෝඩයෙක්ම සිතන්නේ ඔවුන්ට ක්ෂුද්‍ර ප්‍රශස්තිකරණය කළ හැකි යැයි සිතයි " ...;)
Nim

Im නිම්: ලක්ෂ්‍යය ගෙන ඇත;)
back2dos

27

මම ඔබේ පියා සමඟ එකඟ වෙමි: "කෝඩරයක් ඔවුන්ගේ කේතයේ ක්‍රියාකාරිත්වය ක්ෂුද්‍ර මට්ටමින් පවා නොසලකයි නම්, ඔවුන් හොඳ ක්‍රමලේඛකයන් නොවේ." ප්රධාන දෙය නම් "කාර්ය සාධනය සලකා බැලීම". එය "සෑම පියවරකදීම ක්ෂුද්‍ර ප්‍රශස්තිකරණය" කිරීමට සමාන නොවේ.

අනෙක් බොහෝ අදහස් සමඟ මම එකඟ වෙමි - සී වැඩසටහන් වේගවත් කිරීමට භාවිතා කළ දේ අද එසේ නොකරනු ඇත - නමුත් සලකා බැලිය යුතු තවත් බැරෑරුම් කරුණු තිබේ: මම සී හෝ සී ++ භාවිතා කළ යුතුද? සරල බර පැටවූ ක්‍රියාකරුවන් සහිත පන්ති ඔබ ඒවා වැඩිපුර භාවිතා කරන්නේ නම් කාර්ය සාධනය විනාශ කළ හැකිය. එය වැදගත් ද? එය ඔබගේ යෙදුම මත රඳා පවතී, නමුත් ඔබ එය විමසා බැලුවේ නැත්නම්, ඔබ ඉතා හොඳ ක්‍රමලේඛකයෙකු නොවේ. සමහර අය එය මිලි තත්පර 2 ක් පමණ සලකා බලා එය බැහැර කළ හැකිය, නමුත් මම සිතන්නේ බොහෝ දෙනෙක් එය වචනානුසාරයෙන් නොසලකයි.

යථාර්ථය නම්, ප්‍රශස්තිකරණය සමඟ කේතය කියවීමට අපහසු විය හැකිය. කේතය ලිවීමට වැඩි කාලයක් ගතවනු ඇත. කේතය ටිකක් වේගවත් හා විශාලත්වයේ අනුපිළිවෙලක් අතර කොහේ හරි වේවි (එය දුර්ලභයි). ඔබේ ගනුදෙනුකරුවන් බොහෝ විට වෙනස නොදැන සිටිති.

තවත් යථාර්ථයක් නම්, කේතය නැවත භාවිතා කිරීමට මිනිසුන් කැමති වන අතර, එය අවසන් වන තැන ඔබ එය ලියූ කාලයට වඩා වෙනස් විය හැකිය. හදිසියේම මිනිසුන් සැලකිලිමත් විය හැකිය.

උදාහරණයක් ලෙස, ඔබ PC එකක හෝ ක්‍රීඩා කොන්සෝලයක් සඳහා Angry Birds වැනි දෙයක් ලියා ඇති බව පවසන්න . ඔබගේ භෞතික විද්‍යා පද්ධතියේ සහ ඔබේ ග්‍රැෆික් පද්ධතියේ ප්‍රශස්තිකරණය ඔබ නොසලකා හැර ඇත - මන්දයත් 2.5 GHz ද්විත්ව මධ්‍යයන් මූලික වශයෙන් මේ දිනවල අවම වන අතර ඔබේ ක්‍රීඩාව ප්‍රමාණවත් ලෙස ක්‍රියා කරයි. එවිට ස්මාර්ට් ජංගම දුරකථන පැමිණෙන අතර ඔබට එය වරාය කිරීමට අවශ්‍යය. ඔහ් ඩාර්න්, 600 MHz ARM හරයක්?

වෙබ් අඩවියක් ගැන සිතන්න - සති අන්තයේ උණුසුම් හෝ නැත වැනි දෙයක් එකට විසි කරයි. ඔබ භාවිතා කරන ඕනෑම දත්ත සමුදායක් භාවිතා කරයි, සෑම දෙයක්ම වේගයෙන් සංවර්ධනය කරමින් මනසින් ලියන්න, ඔබේ මිතුරන්ට URL යක් විද්‍යුත් තැපෑලෙන් දියත් කරන්න. මාස තුනකට පසු ඔබේ සේවාදායකය අධික බරකින් මිය යන අතර ඔබට පරිමාණයට කළ හැකි කිසිවක් නැත. එය සෑම විටම සිදු වේ. විශාලතම වෙබ් අඩවි වල කිලෝවොට් සිය ගණනකින් හෝ මෙගාවොට් වලින් පවා මනිනු ලබන විදුලි බිල් ඇත. ඒ ගැන සිතා බලන්න, කේත ප්‍රශස්තිකරණය හරහා ඉතිරි කළ යුතු මෙගාවොට් තිබේ.

ඔබේ පියා පැවසූ පරිදි, ඔබ අවම වශයෙන් එය සලකා බැලිය යුතුය. බොහෝ අය මේසය මත කොපමණ කාර්ය සාධනයක් දැයි නොදන්නා අතර "නොමේරූ ප්‍රශස්තිකරණය" සහ "එය නොකරන්න" යන්න පිළිබඳ ඉක්මන් විමසුමක් සමඟ එය වටහා ගන්න. මොවුන් හොඳ ක්‍රමලේඛකයන් නොවේ.

මෙය මෙම වෙබ් අඩවි වල ජනප්‍රිය මතයක් නොවේ. කීර්ති නාමයෙන් සමුගන්න ....


3
අනිවාර්යෙන්ම, ඔබ එය සලකා බැලිය යුතුය (ඔබේ හිස පිටුපස) සහ එය ප්‍රතික්ෂේප කළ යුතුය. ප්‍රශස්තිකරණය සාමාන්‍යයෙන් කේත කියවීමේ හැකියාව අඩු කරන අතර 10 හෝ ඊට වැඩි සාධකයකින් කේත හා නඩත්තු කිරීමට ගතවන කාලය වැඩි කළ හැකි බව ඔබ සලකා බැලිය යුතුය. වැඩසටහන CPU තීව්‍ර නොවේ නම්, එය බොහෝ විට අවශ්‍ය නොවේ. ඔබේ සම්පාදකයා සාමාන්‍යයෙන් ඔබට වඩා ප්‍රශස්තිකරණයට වඩා හොඳ බවත්, ඔබේ බොහෝ ප්‍රශස්තිකරණයන් ඇත්ත වශයෙන්ම කාර්ය සාධනයට හානියක් වන බවත් හඳුනා ගන්න. ඔබගේ ප්‍රශස්තිකරණය සහ පැතිකඩ පරීක්ෂා කිරීමට එය ඔබගේ කාලය වටින්නේ නැතිනම්, එය ප්‍රශස්තිකරණය කිරීමට ඔබේ කාලය වටින්නේ නැත.
dr jimbob

3
ඔබ නොමේරූ ලෙස ප්‍රශස්තිකරණය නොකිරීමට හේතුව ඔබේ කෝපාවිෂ්ට පක්ෂීන්ගේ උදාහරණයෙන් හරියටම පෙන්වයි . ඩෙස්ක්ටොප් සිට කොන්සෝලය දක්වා ජංගම උපාංග (ය) වෙත ගෙනයාමේදී, ඔබ (අවම වශයෙන්) වෙනස් ආකාරයේ දෘඩාංග වර්ග තුනක් සමඟ කටයුතු කරන අතර තවත් එකක් සඳහා උපකාර කිරීම වෙනුවට එකක් සඳහා ප්‍රශස්තිකරණය රිදවිය හැකිය. වඩාත් නරක අතට, ප්‍රශස්තිකරණය යනු කේතය තේරුම් ගැනීමට අපහසු වන අතර එම නිසා වරාය කිරීමට අපහසු වේ. ආරම්භයේ සිටම කාර්යක්ෂම ඇල්ගොරිතම තෝරන්න, නමුත් එක් එක් වේදිකාවේ කරදර ඇති තැන සැබෑ දත්ත මඟින් ඔබට පවසන විට කාර්ය සාධන සුසර කිරීමේ අදියර සඳහා ක්ෂුද්‍ර ප්‍රශස්තිකරණය සුරකින්න.
කාලෙබ්

Ale කාලෙබ්: විශේෂිත දෘඩාංග සඳහා ප්‍රශස්තිකරණය නොකිරීමට හේතුව කෝපාවිෂ්ට පක්ෂීන්ගේ උදාහරණයෙන් දැක්වේ. වඩාත් සාමාන්‍ය “සී මට්ටමේ” ප්‍රශස්තිකරණයන් කිරීමට කරදර නොවී පිළිස්සී යාමෙන් තොරව ඔබ සම්පූර්ණ යෙදුමක් ගොඩනගන්නේ කෙසේද යන්නත් එය විදහා දක්වයි. ඇත්ත වශයෙන්ම පිළිස්සී නැත, නමුත් ඔබේ මුල් අභිප්‍රාය ඉක්මවා යාමේ ගැටලුවක් ඇත.
phkahler

25

අපි මුලින්ම ඔබේ නඩුව ගනිමු: PHP

  • PHP යනු මෙම “ක්ෂුද්‍ර ප්‍රශස්තිකරණය” ගැන කරදර විය යුතු භාෂාවක් (එහි ස්වභාවය සහ එහි ප්‍රධාන යෙදුම් වසම නිසා) යැයි මම නොසිතමි. PHP කේතය බොහෝ දුරට ඔප්කෝඩ් හැඹිලි සමඟ ප්‍රශස්තිකරණය කර ඇත.
  • PHP හි ලියා ඇති වැඩසටහන් CPU බැඳී නොමැත, ඒවා බොහෝ දුරට I / O බැඳී ඇත, එබැවින් මෙම ප්‍රශස්තිකරණය කෙසේ හෝ ඔබගේ කාලය වටින්නේ නැත.
  • ඔබ ප්‍රශස්තිකරණය කළ යුතු ඕනෑම දෙයක් සී දිගුවකට උදුරාගෙන PHP ධාවන වේලාවේ ගතිකව පටවනු ලැබේ
  • ඔබට පෙනෙන පරිදි, PHP හි අපගේ කේතය ක්ෂුද්‍ර ප්‍රශස්තිකරණය කිරීමෙන් අපට කිසිදු දිරිගැන්වීමක් නොලැබේ - අනෙක් අතට, ඔබ එම කාලය PHP කේතය වඩාත් කියවිය හැකි සහ නඩත්තු කළ හැකි ලෙස ගත කරන්නේ නම් - එමඟින් ඔබට වැඩි ලාභාංශ ගෙවනු ඇත.

සාමාන්යයෙන්,

පයිතන් හෝ රූබි වැනි ගතික භාෂාවකින් මගේ කේතය ප්‍රශස්තිකරණය කිරීමට මම "ටූඕ" වැඩි කාලයක් වැය නොකරමි - මන්ද ඒවා සීපීයූ දැඩි සංඛ්‍යා බිඳීමේ කාර්යයන් සඳහා නිර්මාණය කර නොමැති බැවිනි. සැබෑ ලෝක තත්වයක් විස්තීර්ණ ආකාරයකින් ආකෘතිකරණය කිරීම (කියවීමට හා නඩත්තු කිරීමට පහසුය) - ප්‍රකාශිතතාව ලෙස හැඳින්වෙන - වේගයට වඩා වැදගත් වන විවිධ ආකාරයේ ගැටලු ඒවා විසඳයි . වේගය මූලික අවධානයට ලක් වූයේ නම්, ඒවා මුලින් ගතික නොවනු ඇත.

සම්පාදනය කරන ලද වැඩසටහන් සඳහා (C ++, Java), ප්‍රශස්තිකරණය වඩාත් වැදගත් වේ. නමුත් එහිදීද, පළමුව ඔබ ලියන වැඩසටහනේ ස්වභාවය / වසම / අරමුණ දෙස බැලිය යුතුය. එම ප්‍රශස්තිකරණයෙන් ලැබෙන ලාභයන්ට එරෙහිව ක්ෂුද්‍ර ප්‍රශස්තිකරණය කිරීමට ඔබ කාලය පරෙස්සමින් කිරා මැන බැලිය යුතුය. ඔබට ඊටත් වඩා ප්‍රශස්තිකරණයක් අවශ්‍ය නම්, ඔබ පියවරක් පහළට යාම ගැන සලකා බැලිය හැකිය - තවද ඔබේ කේතයේ කොටස් එකලස් කිරීමේ දී කේත කරන්න.

එබැවින්, ඔබේ මුල් ප්‍රශ්නයට පිළිතුරු දීමට - "කේතීකරණයේදී ක්ෂුද්‍ර ප්‍රශස්තිකරණය වැදගත් ද?" - පිළිතුර - එය රඳා පවතී -

  • ඔබ කරන්නේ කුමන ආකාරයේ දෙයක්ද: යෙදුම් වසම, සංකීර්ණත්වය?
  • ඔබේ වැඩසටහන සඳහා මයික්‍රො තත්පර වේගය වැඩි දියුණු කිරීම සැබවින්ම වැදගත් ද?
  • වඩාත්ම වාසිදායක වන්නේ කුමන ආකාරයේ ප්‍රශස්තිකරණයද? එය සැමවිටම කේත ප්‍රශස්තිකරණය නොව බාහිර දෙයක් විය හැකිය.
  • ඔබ ක්ෂුද්‍ර ප්‍රශස්තිකරණය සඳහා ආයෝජනය කරන කාලයෙන් කොපමණ “යහපත්කම” (වේගය අනුව) ඔබ නෙලා ගන්නවාද?
  • දෘඩාංග, RAM සහ ප්‍රොසෙසරය වෙනස් කිරීමෙන්, සමාන්තරව කේතය ක්‍රියාත්මක කිරීමෙන් හෝ බෙදා හරින ලද පද්ධතියකින් වඩා හොඳ වේගයක් වෙනත් ආකාරවලින් ලබා ගත හැකිද?

ක්ෂුද්‍ර ප්‍රශස්තිකරණය (ඒ සඳහා කේත ප්‍රශස්තිකරණය) කාලය ගත කරනවා පමණක් නොව, එය ඔබේ කේතයේ ස්වාභාවික කියවීමේ හැකියාව “විකෘති” කරයි, එමඟින් එය නඩත්තු-බර බවට පත් කරයි. සෑම විටම එය අවසාන උපක්‍රමයක් ලෙස සලකන්න - සෑම විටම තනි කේත ගොනු ප්‍රශස්තිකරණය කිරීමට වඩා හොඳ දෘඩාංග හා වඩා හොඳ ගෘහ නිර්මාණ ශිල්පයක් අනුගමනය කරමින් සමස්ත යෙදුමම ප්‍රශස්ත කිරීමට උත්සාහ කරන්න.


18

ක්ෂුද්‍ර ප්‍රශස්තිකරණය යැයි පවසන බොහෝ පිළිතුරු ඇති බව පෙනේ

වෙළඳාම පිළිබඳ සියල්ල - කාර්ය සාධනය, කාලය, පිරිවැය, උත්සාහය, කියවීමේ හැකියාව / නඩත්තු කිරීමේ හැකියාව සහ යනාදිය.

නමුත් කියවීමේ හැකියාව නොමැති සමහර ප්‍රශස්තිකරණ ඇති බව මම දනිමි, විනෝදය සඳහා ඒවා කිරීමට මම කැමතියි. මගේ පාසැල් පැවරුම් සමහරක් (සියල්ලම වේගය පදනම් කරගත්) මම දුටුවෙමි, කොන්දේසි සහිත ප්‍රකාශ ලිවීමේදී ක්ෂුද්‍ර ප්‍රශස්තිකරණය සලකා බැලීම සැමවිටම සතුටක්:

if (counter < X && shouldDoThis()) // shouldDoThis() is an expensive function

සෑම විටම වඩා හොඳයි

if (shouldDoThis() && counter < X ) 

ඔබේ කේතය "වේගවත් කිරීම" සඳහා ක්‍රම කිහිපයක් ඇති අතර වෙනස සාමාන්‍යයෙන් නොසැලකිලිමත් වේ (සෑම විටම එසේ නොවේ), නමුත් මම එය එසේ ලිවුවහොත් මට හොඳක් දැනේ.

කවුරුහරි මෙය සැබවින්ම ප්‍රශස්තිකරණයක් ලෙස සලකන්නේ දැයි මම නොදනිමි, නමුත් මම සිතන්නේ ක්‍රමලේඛකයෙකු ඔවුන්ගේ කේතය ලිවීමේදී මේවා දැනගෙන සලකා බැලිය යුතුය.


2
මෙම විශේෂිත අවස්ථාව සඳහා එය වැදගත් නොවනු ඇත . කෙසේ වෙතත් මම හිතන ඉතා මේ වගේ ප්රතිස්තිකරණය හඳුනාගත හැකි වීම වැදගත් විට එසේ බව කරන්නේ කාරණය, ඔබ ඇත්ත පසු ලක්කිරීම හා උපරිම ප්රතිලාභ අනවශ්ය කාලය වැය කළ යුතු නැත.
tskuzzy

4
මෙය ඉතා භයානක උදාහරණයකි. ක ප්රශස්තිකරණය කළ යුතු නැහැ හැසිරීම වෙනස් . cheap() && expensive()එය ප්‍රශස්තකරණය කිරීමක් යැයි යෝජනා කිරීම පවා, එය නිර්මාණය expensive () && cheap()කරන සැලකිය යුතු අර්ථකථන වෙනසක් නොසලකා ( අන්ධ ලෙස එකක් ආදේශ කිරීමට මිනිසුන්ට ආරාධනා කරයි ( &&කෙටි පරිපථ ක්‍රියාකරු සිටින භාෂාවලින් ).
මාර්ක් බූත්

5
ශ්‍රිතයට අතුරු ආබාධ නොමැති නම්, ඒවා සමාන වන අතර එකක් වේගවත් වේ. ඔවුන්ට අතුරු ආබාධ තිබේ නම්, යමෙකු මේ ආකාරයෙන් කේතය ලිවීම නොකළ යුතුය. මෙය පුරුද්දෙන් බැහැර කළ යුතු දෙයක් යැයි මම කියමි.
phkahler

4
Ark මාක්බූත් මට මෙහි phkahler සමඟ එකඟ විය යුතුය, මෙම කාර්යයන් කිසිවක් අතුරු ආබාධ ඇති නොකළ යුතුය! If ප්‍රකාශයක ඇති condionos අනුපිළිවෙල වැඩසටහනේ ප්‍රති come ල කෙරෙහි බලපෑමක් ඇති නොකළ යුතුය. මගේ උදාහරණය if (x<100 && isPrime(x))වඩාත් පැහැදිලි ලෙස ලිවීමට වඩා හොඳ වනු ඇත .
zidarsk8

1
@ zidarsk8 - ක නම් ප්රශස්තිකරණය හැර වෙනත් කිසිම දෙයක් වෙනස් ක්රියාත්මක වේගය එවිට, එය නොවන ප්රශස්තිකරණය . ක්‍රමලේඛකයන් වශයෙන් අපට බොහෝ විට ප්‍රායෝගික විය යුතු අතර සමහර විට එයින් අදහස් කරන්නේ කෙටි පරිපථ ක්‍රියාකරුවෙකු සමඟ භාවිතා කරන සියලුම කාර්යයන් පිරිසිදු බව අපට සහතික කළ නොහැකි බවයි - විශේෂයෙන් අපගේ කේතය අපට පාලනයකින් තොරව තෙවන පාර්ශවීය පුස්තකාල අමතන විට. එවැනි තත්වයක් තුළ අද්දැකීම් අඩු ක්‍රමලේඛකයින් ප්‍රශස්තිකරණයේ නාමයෙන් දෝෂ හඳුන්වා දීමට උනන්දු නොකිරීමට වගබලා ගත යුතුය .
මාර්ක් බූත්

11

මගේ වෘත්තීය දිවියේ මුල් අවධියේදී, “ක්ෂුද්‍ර ප්‍රශස්තකරණය නොකරන්න” වැනි හිස් ප්‍රකාශයන් බොහෝ ව්‍යාකූලත්වයට හේතු විය. සෑම දෙයක්ම අවස්ථාවාදී ය; මේ අනුව, මිනිසුන් මෙය කිරීමට වඩා “හොඳම පුහුණුව” යැයි පැවසීමට හේතුව.

"හොඳම පුහුණුව" යනු සියලු තත්වයන් සැලකිල්ලට ගෙන ඉහළම තේරීමයි. උදාහරණයක් ලෙස, පේළිගත SQL වෙනුවට LINQ සහ ආයතන රාමුව භාවිතා කළ යුතුය. මගේ සමාගමේ අපි සිටින්නේ SQL Server 2000 හි ය . SQL Server 2000 ආයතන රාමුවට සහය නොදක්වයි. හොඳම භාවිතයන් අවශ්‍යයි:

  • SQL සේවාදායකයේ නව සංස්කරණයක් මිලට ගැනීමේ අදහසින් මගේ ලොක්කා විකිණීම, එයින් අදහස් වන්නේ රුපියල් දහස් ගණනකි.
  • නව තාක්ෂණය ඉගෙනීමේ අදහස මත සංවර්ධකයින් විකිණීම.

අත්දැකීම් වලින් මම දන්නවා මෙය සිදු නොවන බව. ඒ නිසා, මට ඉවත්විය හැකිය, ආතතිය අවසානය දක්වා හෝ හොඳම පුරුද්ද අනුගමනය නොකිරීමට.

සමස්ත ප්‍රති come ලයට බලපාන තීරණ පිටුපස දේශපාලන, තාක්ෂණික හා මූල්‍යමය කරුණු තිබේ. තීරණයක් ගැනීමේදී මෙම කරුණ මතක තබාගෙන ඔබේ සටන් ely ානවන්තව තෝරා ගන්න.

" සෑම දෙයකටම සෘතුවක් ඇත, අහස යට සෑම ක්‍රියාකාරකමක් සඳහාම කාලයක් තිබේ. "


1
BTW, ඔබට පේළිගත SQL සඳහා ක්ෂුද්‍ර ORM විකල්පයක් ලෙස ඩැපර් භාවිතා කළ හැකිය .
ඩෑන්

2
LINQ and Entity Framework should be used in lieu of inline SQL- යමක් ප්‍රශස්තිකරණය කිරීමට ඔබට ඇත්ත වශයෙන්ම පේළිගත SQL අවශ්‍ය වන තුරු; EF නිපදවන SQL සෑම විටම ප්‍රශස්ත නොවේ.
රොබට් හාවි

1
fwiw, ඔබේ ලොක්කා SQL 2k8 හි බලපත්‍ර පිරිවැය ගැන කනස්සල්ලට පත්ව සිටී නම් (හෝ වෙනත් ඕනෑම දෙයක් වර්තමාන විය හැකිය), ඔබ පෙන්වා දිය යුත්තේ එය ඉතා ඉක්මණින් EOL මතට පැමිණීමට තරම් පැරණි බවය (එය දැනටමත් නොමැති නම්)
වරෙන්

@warren - සමහර සමාගම් එවැනි දේවල් සැලකිල්ලට නොගනී. සමහරුන්ට, එය තවමත් "වැඩ" කරන්නේ නම් ඒවා යාවත්කාලීන නොවේ. වැඩ කිරීමෙන්, මම අදහස් කළේ සේවාදායකය තවමත් ක්‍රියාත්මක වන බවයි. අප දැනටමත් EF සමඟ සහයෝගය නොමැතිකම දකිමු. කිසිදු මුදලක් වියදම් කිරීමට ඔවුන්ට ඒත්තු ගැන්වීමට එය පමණක් ප්‍රමාණවත් නොවේ.
පී. බ්‍රයන්.මැකී

1
ඔබ දන්නා පරිදි, ඔබට SQL 2000 සමඟ EF භාවිතා කළ හැකිය. නිර්මාණකරු ක්‍රියා නොකරයි, නමුත් සත්‍ය වස්තු රාමුව SQL 2000 සඳහා සහය දක්වයි. නිර්මාණකරුගේ සීමාව ඉක්මවා යාම සඳහා, ඔබට එකම ක්‍රමලේඛයකින් වර්ග 2008 සී express ්‍රගාමී දේශීය දත්ත ගබඩාවක් නිර්මාණය කළ හැකිය. SQL 2000 දත්ත සමුදාය ලෙස, සියලු පන්ති උත්පාදනය කිරීම සඳහා නිර්මාණකරු වෙත යොමු කරන්න, ඉන්පසු .edmx ගොනුව වෙත ගොස් ඉලක්කගත දත්ත සමුදාය අනුවාදය 2000 දක්වා වෙනස් කර ඔබේ SQL සේවාදායක 2000 දත්ත ගබඩාවේ සම්බන්ධතා නූල යොමු කරන්න. හොඳම විසඳුම නොවේ, නමුත් ඔබට උත්ශ්‍රේණිගත කළ නොහැකි නම් එය ක්‍රියාත්මක වේ.
නීල්

8

මෙය සැමවිටම වෙළඳාමකි.

පළමුව, පරිගණක කර්මාන්තය අවසානයේ මුදල් ගැන ය. සංවර්ධකයෙකු ලෙස ඔබ කළ යුත්තේ ගනුදෙනුකරුවන් සඳහා වටිනාකමක් ජනනය කිරීම නිසා ඔබට මුදල් ලැබෙනු ඇත (එය අතිශය සරල කිරීමකි නමුත් ප්‍රධාන කරුණ මෙහි ඇත).

සංවර්ධක කාලය සඳහා මුදල් වැය වේ. යන්ත්‍ර බලය සඳහා මුදල් ද වැය වේ. සාමාන්‍යයෙන් මෙම දෙවන පිරිවැය පළමු පිරිවැයට වඩා අඩුය. එබැවින්, කියවිය හැකි කේතයක් සහ නඩත්තු කළ හැකි කේතයක් තිබීම සඳහා මෙය ප්‍රාග්ධනයකි, එබැවින් සංවර්ධකයාට වැඩි කාලයක් වටිනාකම් ලබා දිය හැකිය.

ක්ෂුද්‍ර ප්‍රශස්තිකරණය සමහර විට වැදගත් විය හැකිය. නමුත් ඒවා සාමාන්‍යයෙන් කියවිය හැක්කේ අඩු කියවිය හැකි කේතයක් හෝ අඩු කළ හැකි කේතයකි (මෙය ඔබගේ සම්බන්ධිත උදාහරණයේ තත්වය නොවේ, නමුත් පොදුවේ ගත් කල). මෙය යම් අවස්ථාවක දී සංවර්ධකයාගේ කාලය සඳහා වැය වේ. මෙම කාලය යන්ත්‍ර බලයට වඩා මිල අධික බැවින් මෙය නාස්තියකි.

දෙවනුව, විශාල ව්‍යාපෘතියක ක්ෂුද්‍ර ප්‍රශස්තිකරණය නඩත්තු කිරීමට / පරිණාමය වීමට අපහසු හා දුෂ්කර කළ හැකිය. එහි ඇති ගැටළුව නම් පරිණාමය වන විට වෙනත් ප්‍රශස්තිකරණයක් දැන් කළ නොහැකි වීමයි. පරිණාමය වන යෙදුමක් සමඟ, ඔබ සාමාන්‍යයෙන් අවසන් වන්නේ එම ප්‍රශස්තිකරණයන් නොකර ඔබට තිබූ දෙයට වඩා මන්දගාමී විසඳුමකි.

තෙවනුව, දත්ත කට්ටලය වර්ධනය වුවහොත් ඇල්ගොරිතම සංකීර්ණතාවය සාමාන්‍යයෙන් ඔබට කළ හැකි ඕනෑම ක්ෂුද්‍ර ප්‍රශස්තිකරණයක් ජය ගන්නා බැවින් ප්‍රශස්තිකරණය බොහෝ විට අදාළ නොවේ. කනගාටුවට කරුණක් නම්, ක්ෂුද්‍ර ප්‍රශස්තිකරණය මඟින් ඔබේ කේතය නඩත්තු කිරීමට / පරිණාමය වීමට අපහසු වන හෙයින්, ප්‍රශස්තිකරණය කිරීම දුෂ්කර වනු ඇත.

සමහර විට, වටිනාකම මෙම ප්‍රශස්තිකරණයේ ඇත (වීඩියෝ ක්‍රීඩා හෝ ගුවන් යානයක ස්වයංක්‍රීය නියමුවෙකු වැනි ප්‍රමාද විවේචනාත්මක වැඩසටහන් ගැන සිතන්න). නමුත් මෙය නිරූපණය කළ යුතුය. සාමාන්‍යයෙන් ඔබේ වැඩසටහන වැඩි කාලයක් ගත කරන්නේ කේතයේ සීමිත කොටසක ය. ඔබ කුමක් කළත් ක්ෂුද්‍ර ප්‍රශස්තිකරණය කුමක් වුවත්, බාධක හඳුනාගෙන මෙම කොටසෙහි වැඩ නොකර ඔබේ වැඩසටහන් කිසි විටෙකත් වේගවත් නොවනු ඇත.

ඔබ කළ ආකාරයට ඔබේ ප්‍රශ්නය ඇසීමෙන් පෙනී ගියේ ඔබ සත්‍ය වැඩසටහනක ගැටලුව මිණුම් සලකුණු නොකළ බවයි. මෙම අවස්ථාවේ දී, ඔබට උපක්‍රමය කළ හැකි අතර එය වේගවත් ද නැද්ද යන්න අවධානයට ලක් විය. ඒ නිසා ඔබ එය විමසුවේ කිසියම් ගැටළුවක් ඇතිවීමට පෙරය. ගැටලුව ඇති තැන මෙයයි. ඔබ ප්‍රශස්තිකරණය පිළිබඳ ගැටලුව වැරදි ආකාරයෙන් හසුරුවා ඇත.

නඩත්තු කිරීම සහ පරිණාමය සාමාන්‍යයෙන් ක්ෂුද්‍ර ප්‍රශස්තිකරණයට වඩා වටින බැවින්, කිසිවක් කිරීමට පෙර නිවැරදි අතුරු මුහුණතක් ඇති බවට වග බලා ගන්න. එවිට ඔබේ වැඩසටහනේ කොටස් එකිනෙකට ප්‍රමාණවත් වියුක්ත නම්, ඔබට සියල්ල අවුල් නොකර මයික්‍රෝ ප්‍රශස්තිකරණය කළ හැකිය. මේ සඳහා ඔබේ අතුරු මුහුණත විශ්වාස කළ හැකි තරම් කාලයක් ක්‍රියාත්මක වේ.


"සෑම විටම වෙළඳාමක් තිබේ". වැඩසටහන වෙළඳාම් වක්‍රයෙහි තිබේ නම් එක් විචල්‍යයක් අඩු කිරීම අනෙක වැඩි කරන බව ඇත්තකි . මගේ අත්දැකීම් අනුව, බොහෝ වැඩසටහන් වෙළඳාම් වක්‍රය අසල කොතැනකවත් නොමැති අතර විචල්‍යයන් දෙකම අඩු කිරීමට ඕනෑ තරම් ඉඩ තිබේ.
මයික් ඩන්ලාවි

+1 නඩත්තු කිරීම හා පරිණාමය වඩා වටිනා වන්නේ ක්ෂුද්‍ර ප්‍රශස්තකරණයයි. පරිගණක කර්මාන්තය මුදල් වලට වඩා වැඩි බව මට විශ්වාසයි. උදාහරණයක් ලෙස, විවෘත මූලාශ්‍ර, අධ්‍යාපනය, නවෝත්පාදන, පාලනය, ප්‍රජාව යනාදිය එහි මූලයෙන් මුදල් සොයා ගත හැකි බව මට විශ්වාසයි, නමුත් බොහෝ දේ සම්බන්ධයෙන් එය සත්‍යයකි.
බොස්

OBoz kay> මෙය අර්ධ වශයෙන් සත්‍යයකි. පළමුවෙන්ම ඔබේ ලොක්කා සහ පාරිභෝගිකයා බොහෝ විට තෝසස් ගැන කිසිවක් නොදන්නා අතර මුදල් ගැන සැලකිලිමත් වේ. ඔබට සමහර විවෘත කේත මෙවලම් ප්‍රවර්ධනය කිරීමට අවශ්‍ය නම්, එය සමාගමේ වෙළඳ නාමය වැඩිදියුණු කරන්නේ කෙසේද යන්න හෝ එය සංවර්ධන පිරිවැය අඩු කරන්නේ කෙසේද යන්න ඔබට පැවසිය යුතුය. ප්ලස්, සංවර්ධකයින් සතුටු කිරීම ඔබේ සමාගම තුළ හොඳ දේ ලබා ගැනීමට මාර්ගයකි. හොඳ දේව් මුදල් උපයයි (වැඩි වශයෙන් විසි කිරීමේ ගුණාත්මකභාවය සහ නව්‍යකරණය). අවසානයේ මුදල් යතුරයි. මගේ ලිනක්ස් පරිගණකයෙන් හොඳ නිදහස් මෘදුකාංග ආධාරකරුවෙකු බව මම ලියමි. අධ්‍යාපනය සඳහා ද එය එසේම වේ.
deadalnix

8

කාර්ය සාධනය විශේෂාංගයකි

ජෙෆ් ඇට්වුඩ්ගේ ලිපිය ඉහළ කාර්යසාධනයක් සහිත වෙබ් අඩවියක් තැනීම පිළිබඳ විශිෂ්ට එකක් වන අතර එසේ කිරීමේ වැදගත්කම ...

එයින් කියැවෙන්නේ ඔබට අවශ්‍ය වන තෙක් ක්ෂුද්‍ර ප්‍රශස්තිකරණය කෙරෙහි අවධානය යොමු නොකරන්න. ඔබට ඉටු කළ හැකි වඩා ලාභදායී ප්‍රශස්තකරණයන් ඇත. කේතය නොව ගෘහ නිර්මාණ ශිල්පය කෙරෙහි අවධානය යොමු කරන්න. මා දැක ඇති බොහෝ වෙබ් අඩවි සෙමින් සිදු කර ඇති ඉහළ මට්ටමේ ගැටළු (අනවශ්‍ය වෙබ් සේවා ස්ථරය, දුර්වල දත්ත සමුදාය සැලසුම් කිරීම, ඕනෑවට වඩා සංකීර්ණ ගෘහ නිර්මාණ ශිල්පය) ඇති අතර ඒවා ක්‍රියාකාරීත්වයට අහිතකර ලෙස බලපානවා පමණක් නොව ගැඹුරින් මුල්බැස ඇති අතර ඒවා නිවැරදි කිරීමට අපහසු විය.

ඔබ වෙබ් අඩවියක් ගොඩනඟන විට, ඔබේ සේවාදායක පාර්ශවීය කේතය සහ දත්ත සමුදා තර්කනය ඔබේ සේවාදායක පාර්ශවීය කේතයට වඩා කාර්ය සාධන ගැටලු ඇති කිරීමට බොහෝ දුරට ඉඩ ඇත. ඕනෑම දෙයක් මෙන්, ඔබට කාර්ය සාධන ගැටලු ඇත්නම් ඔබ දැන ගනු ඇත, ඊටත් වඩා හොඳ ඔබේ කේතය පැතිකඩ කරන්න, එවිට ඔබට ඒවා ඉක්මනින් සොයාගත හැකිය.


7

සංවර්ධක කාලය පරිගණක වේලාවට වඩා වැඩිය. සාමාන්‍යයෙන් ඔබට ප්‍රශස්තිකරණය කිරීමට අවශ්‍ය වන්නේ එයයි. එහෙත්:

  • ක්ෂුද්‍ර ප්‍රශස්තිකරණය සහ ඇල්ගොරිතම සංකීර්ණතාව අතර වෙනසක් ඇත. ඔබ නිවැරදි ඇල්ගොරිතම භාවිතා කරන බවට විශ්වාසයෙන් සිටීමට ප්‍රමාණවත් කාලයක් ගත කරන්න .
  • ඔබ නිවැරදි ප්‍රශ්නය අසන බවට වග බලා ගන්න select (select count(*) from foo) >= 1, එයම නොවේ select exists(select 1 from foo).
  • සමහර භාෂා මෝඩයන් ජනප්‍රිය වන්නේ ඒවා වේගවත් නිසා ය, ඒවා භාවිතා කිරීම කමක් නැත, මන්ද භාෂාවේ බොහෝ චතුර කථිකයන් ඔවුන් හුරුපුරුදු වනු ඇත. (ඔබේ උදාහරණය හොඳ උදාහරණයකි).

7

ඔබට ප්‍රශස්තිකරණය කිරීමට අවශ්‍ය කුමක්ද?

  • මෘදුකාංග ක්‍රියාකාරිත්වය?
  • විශ්වසනීයත්වය?
  • ක්‍රමලේඛක produc ලදායිතාව?
  • පාරිභෝගික තෘප්තිය?
  • බලශක්ති කාර්යක්ෂමතාව?
  • නඩත්තු කිරීමේ හැකියාව?
  • පොළට යන්න වෙලාව හරි?
  • පිරිවැය?

“ප්‍රශස්තිකරණය” යනු සෑම විටම කේතය හැකි තරම් වේගයෙන් ධාවනය කිරීම නොවේ. යමක් කිරීමට නිරපේක්ෂ වේගවත්ම ක්‍රමය සොයා ගැනීම වැදගත් වන අවස්ථා තිබේ, නමුත් බොහෝ කේතවල එය එතරම් පොදු නොවේ. මයික්‍රෝ තත්පර 50 ත් 100 ත් අතර වෙනස පරිශීලකයින්ට දැකිය නොහැකි නම්, කේත දෙක අතර effectively ලදායී ලෙස වෙනසක් නැත, එය ඉඳහිට පමණක් ක්‍රියාත්මක වේ. මෙන්න උදාහරණයක්:

අඛණ්ඩව යතුරු එබීම් දෙකක් අතර ඇති කාලයට වඩා එම දිග බොහෝ සෙයින් අඩු බව තීරණය කිරීම සඳහා පරිශීලකයාගේ ආදානයේ දිග සහ දින දෙකකින් ගතවන කාලය පිළිබඳ දර්ශනයක් නිරන්තරයෙන් යාවත්කාලීන කිරීමට ඔබට අවශ්‍ය නම්, එය ඇත්ත වශයෙන්ම කුමන පුරුද්දක් ද යන්න ගැටළුවක් නොවේ ඔබ භාවිතා කරන. අනෙක් අතට, ඔබට නූල් බිලියනයක දිග තීරණය කිරීමට අවශ්‍ය නම්, විවිධ ක්‍රියාකාරකම් අතර කාර්ය සාධන වෙනස්කම් කෙරෙහි දැඩි අවධානයක් යොමු කිරීමට ඔබට අවශ්‍ය වනු ඇත. පළමු අවස්ථාවේ දී, ඔබට තේරුම් ගැනීමට සහ සත්‍යාපනය කිරීමට පහසු කේත ලිවීමට කැමති විය හැකිය; දෙවන අවස්ථාවෙහිදී, වේගය සඳහා කියවීමේ හැකියාව වෙළඳාම් කිරීමට ඔබ කැමති විය හැකිය.

ඕනෑම අවස්ථාවක, ඔබ ඔබේ කේතය ප්‍රශස්තිකරණය කිරීමට යන්නේ නම්, ඔබ සිදුකරන වෙනස්කම් වලට පෙර සහ පසු ඔබේ කේතය පැතිකඩ කළ යුතුය. මේ දිනවල වැඩසටහන් ප්‍රමාණවත් තරම් සංකීර්ණ බැවින් බාධක ඇති තැන කීමට බොහෝ විට අපහසුය; පැතිකඩ මඟින් ඔබට නිවැරදි කේතය ප්‍රශස්තිකරණය කිරීමට උපකාරී වන අතර පසුව ඔබ කළ ප්‍රශස්තිකරණය සැබවින්ම ක්‍රියාත්මක වූ බව පෙන්වයි.

ඔබේ පියා විශ්‍රාම ගත් විට හෝ ඔහු කුමන ආකාරයේ වැඩසටහන් කළදැයි ඔබ කීවේ නැත, නමුත් ඔහුගේ ප්‍රතිචාරය පුදුමයක් නොවේ. Ically තිහාසිකව, මතකය, ද්විතීයික ගබඩා කිරීම සහ පරිගණක කාලය යන සියල්ලම මිල අධික වූ අතර සමහර විට ඉතා මිල අධික විය. ක්‍රමලේඛක කාලය හා සසඳන විට මේ දිනවල ඒ සියල්ල ඉතා ලාභදායී වී ඇත. ඒ අතරම, ප්‍රොසෙසර සහ සම්පාදකයින්ට ක්‍රමලේඛකයන්ට කිසි විටෙකත් නොගැලපෙන ආකාරයෙන් කේත ප්‍රශස්තිකරණය කිරීමට හැකි වී තිබේ. ක්‍රමලේඛකයින් මෙහි යන්ත්‍ර උපදෙස් කිහිපයක් ලබා ගැනීම සඳහා කුඩා උපක්‍රම භාවිතා කරන දින සහ බොහෝ දුරට නැති වී ගොස් ඇත.


1
+1 පසුගිය වසර කිහිපය තුළ ජංගම උපාංග නැවතත් කේත ප්‍රශස්තිකරණය මත බෙහෙවින් රඳා පවතින බව සඳහන් කළ යුතු නොවේ. ප්‍රශස්තිකරණය කළ කේතයක් ලියන්නේ නැති හෝ අවම වශයෙන් එය සලකන අයෙකුට ඔවුන්ගේ CPU තීව්‍ර යෙදුම ජංගම උපාංගයක සුමටව ක්‍රියාත්මක වීමට අපහසු විය හැකිය.
ස්ටයිලර්

+1 ඔබගේ විය හැකි ප්‍රශස්තිකරණ ලැයිස්තුවට බොහෝ සෙයින් කැමතියි. ඔහු එකලස් කිරීම / ෆෝට්‍රාන් භාවිතා කළේය
බොස්

Yt ස්ටයිලර්: ජංගම උපාංගවල GB මතකය සහිත ක්වාඩ් කෝර් CPU ඇති තෙක් වැඩි කාලයක් ගත නොවනු ඇත, අපට දැනටමත් ද්විත්ව හර ස්මාර්ට්ෆෝන් තිබේ.
බොරු රයන්

Ie ලී රයන්: ඔව් මෙය සත්‍යයකි, නමුත් බොහෝ පුරෝගාමීන් මෙන් ඔවුන්ට ලී බෝට්ටුවල ගමන් කිරීමට සිදුවිය;)
ස්ටයිලර්

7

කේතය ලිවීමේදී මයික්‍රෝ ප්‍රශස්තිකරණය කිරීම වැදගත් නොවේ. ප්‍රශස්තිකරණය කළ යුත්තේ පැතිකඩකගේ සහාය ඇතිව ය.

කෙසේ වෙතත් , ක්‍රමලේඛකයෙකු කේතය ලිවීමේදී පැහැදිලිවම මෝඩ දේවල් කිරීමෙන් වැළකී සිටිය යුතුය .

උදාහරණයක් ලෙස, ලූපයක් තුළ නැවත නැවතත් මිල අධික මෙහෙයුම් නොකරන්න. අගය ලූපයෙන් පිටත විචල්‍යයක ගබඩා කර එය භාවිතා කරන්න. බොහෝ විට හැඳින්වෙන ශ්‍රිතයක නූල් සැසඳීම් හෝ රීජෙක්ස් වැනි දේවල් නැවත නැවතත් නොකරන්න, ඔබට මට්ටමකට යා හැකි විට, සංසන්දනය කර එය පූර්ණ සංඛ්‍යාවක් හෝ ශ්‍රිත යොමු කිරීමක් හෝ ව්‍යුත්පන්න පන්තියක් බවට පත් කරන්න.

පළපුරුදු ක්‍රමලේඛකයෙකුට මතක තබා ගැනීමට මේ දේවල් පහසු වන අතර සෑම විටම පාහේ කේතයේ ගුණාත්මකභාවය වැඩි දියුණු කරයි.


මගේ ප්‍රශ්න සංස්කරණයේදී මා වඩාත් පැහැදිලි විය යුතු බව වටහා ගත් මම, එකම දේම ඇත්ත වශයෙන්ම පැවසුවෙමි - මම එය යාවත්කාලීන කර ඇත.
බොස්

7

ප්‍රශස්තිකරණය කළ යුතු දේ තීරණය කිරීමේදී, සැමවිටම අම්ඩාල්ගේ නීතිය මතක තබා ගන්න . නිවැරදි ගණිතය සඳහා සබැඳිය බලන්න; මතක තබා ගත යුතු සුළු ප්‍රකාශය නම්:

ඔබේ වැඩසටහනේ එක් කොටසක් එහි ධාවන කාලයෙන් 10% ක් සඳහා දායක වන අතර, එම කොටස දෙගුණයක් වේගයෙන් ධාවනය කිරීමට ඔබ ප්‍රශස්තිකරණය කරන්නේ නම්, සමස්තයක් ලෙස වැඩසටහන වේගවත් වන්නේ 5% කින් පමණි.

මුළු ධාවන කාලයෙන් සියයට කිහිපයකට වඩා නොපවතින ඔබේ වැඩසටහනේ කොටස් ප්‍රශස්තිකරණය කිරීම වටින්නේ නැති බව මිනිසුන් නිතරම පවසන්නේ මේ නිසා ය. නමුත් එය වඩාත් පොදු මූලධර්මයක විශේෂ අවස්ථාවක් පමණි. ඇම්ඩාල්ගේ නීතිය මඟින් ඔබට සම්පූර්ණ වැඩසටහන දෙගුණයක් වේගයෙන් ක්‍රියාත්මක කිරීමට අවශ්‍ය නම්, සෑම කැබැල්ලක්ම සාමාන්‍යයෙන් 50% කින් වේගවත් කළ යුතු බව පවසයි. එය ඔබට පවසන්නේ ගිගාබයිට් විස්සක් දත්ත සැකසීමට අවශ්‍ය නම්, එය තැටියෙන් ගිගාබයිට් විස්සක් කියවීමට ගතවන කාලයට වඩා වේගවත් කිරීමට ක්‍රම දෙකක් පමණක් ඇති බවයි: වේගවත් තැටියක් ලබා ගන්න, නැතහොත් දත්ත කුඩා කරන්න.

ඉතින් ක්ෂුද්‍ර ප්‍රශස්තිකරණය ගැන අම්ඩාල්ගේ නීතියෙන් කියන්නේ කුමක්ද? එය පුවරුව හරහා අයදුම් කරන්නේ නම් ඔවුන් එය වටිනවා යැයි එය පවසයි. ඔබේ වැඩසටහනේ සෑම කාර්යයකම ධාවන කාලයෙන් සියයට එකක් රැවුල කැපීමට ඔබට හැකි නම්, සුබ පැතුම්! ඔබ වැඩසටහන සියයට එකකින් වේගවත් කර ඇත. එය කිරීම වටී ද? හොඳයි, සම්පාදකයෙකු ලෙස මම එය කළ ප්‍රශස්තිකරණයක් සොයා ගැනීමට සතුටු වෙමි, නමුත් ඔබ එය අතින් කරන්නේ නම්, මම කියන්නේ ඊට වඩා විශාල දෙයක් සොයන්න.


1
ඇම්ඩාල් උපුටා දැක්වීම සඳහා +1, නමුත් "සමස්ත වැඩසටහනම දෙගුණයක් වේගයෙන් ක්‍රියාත්මක කිරීමට නම්, ඔබ සෑම කෑල්ලක්ම වේගවත් කළ යුතුය" යනුවෙන් මම එකඟ නොවෙමි. මම කියන්නේ ඔබ ඇත්ත වශයෙන්ම කිසිදු "කෑල්ලක්" වේගවත් නොකරන බවයි. ඒ වෙනුවට, ඔබ අනවශ්‍ය වැඩ සොයාගෙන එය තුරන් කරන්න. වැඩසටහන සෙල්ලම් බඩුවට වඩා විශාල නම් විශේෂයෙන් ක්‍රියාකාරී ඇමතුම්. කාර්ය සාධනය පිළිබඳ පොදු චින්තනයෙන් බොහොමයක් ඇමතුම් ගසෙහි අනවශ්‍ය ශාඛා (තනි උපදෙස් විය හැකි) සොයා ගැනීමේ වැදගත්කම මුළුමනින්ම නොසලකා හරින බවක් පෙනේ.
මයික් ඩන්ලවේ

යක්ෂයා එහි "සාමාන්‍ය" යන වචනයේ ඇත. ගණිතමය වශයෙන් ගත් කල, වැඩසටහනක් 50% කින් වේගවත් කිරීම සඳහා සෑම කැබැල්ලක්ම සාමාන්‍යයෙන් 50% කින් වේගවත් කළ යුතුය . දැන්, ඔබට වැඩසටහන 75% ක් ධාවන කාලයට හා 25% ක් ගතවන රැකියාවකට බෙදිය හැකි නම් සහ කලින් 3x වේගවත් කළහොත්, එමඟින් ඔබට 50% ක් ලබා දෙනු ඇත. නමුත් වඩාත් පොදු කාරණය නම්, එක් එක් ධාවන කාලයෙන් 5% ට වඩා අඩු "රැකියා" දුසිම් ගණනක් තිබීමයි - එවිට ඔබට වේගවත් කිරීමට හෝ ඒවායින් බොහොමයක් ඉවත් කිරීමට සිදුවේ.
zwol

මම හිතන්නේ ඊටත් වඩා පොදු සිද්ධියක් තිබේ. 50% ක කාලයක් ගතවන "රැකියාවක්" ඇත, නමුත් ඔබට එය ඇත්ත වශයෙන්ම අවශ්‍ය නොවේ , එබැවින් ඔබ එය සම්පූර්ණයෙන්ම ඉවත් කර, එම ප්‍රමාණයෙන් සමස්ත කාලය අඩු කර නැවත නැවත කරන්න. මෙය පිළිගැනීම අසීරු බව මම දනිමි - වැඩසටහන් විශාල වශයෙන් කාලය ගත කළ හැකි බව (පසු විපරමෙන්) මුළුමනින්ම අනවශ්‍යය. නමුත් මෙන්න මගේ කැනොනිකල් උදාහරණය .
මයික් ඩන්ලාවි

6

එය රඳා පවතින්නේ ඔබ සංවර්ධනයේ කුමන අවධියේද යන්න මතය, මුලින් යමක් ලිවීමට පටන් ගන්නා විට, ක්ෂුද්‍ර ප්‍රශස්තිකරණය සලකා බැලිය යුතු නොවේ, මන්ද ඔබට වඩා හොඳ ඇල්ගොරිතම භාවිතා කරමින් ක්ෂුද්‍ර ප්‍රශස්තිකරණ භාවිතා කිරීමෙන් වැඩි කාර්ය සාධනයක් ලබා ගැනීමට ඔබ බලාපොරොත්තු වේ. සාමාන්‍ය ව්‍යාපාරික යෙදුම්වලට වඩා කාල සංවේදී යෙදුම් ක්ෂුද්‍ර ප්‍රශස්තිකරණ සලකා බැලීම්වලින් වැඩි ප්‍රතිලාභ ලබා ගැනීමට යන බැවින් ඔබ සංවර්ධනය කරන්නේ කුමක් ද යන්න සලකා බලන්න.

ඔබ මෘදුකාංගය පරික්ෂා කර විස්තාරණය කරන්නේ නම්, ක්ෂුද්‍ර ප්‍රශස්තිකරණය මඟින් ඔබට කේතය කියවීමට අපහසු වන අතර ඒවා නිවැරදි කළ යුතු වෙනත් ඕනෑම දෙයක් සමඟ නිවැරදි කළ යුතු ඔවුන්ගේම අද්විතීය දෝෂ සමූහයක් හඳුන්වා දෙයි.

මන්දගාමී කේතය පිළිබඳව ඔබ සැබවින්ම පරිශීලකයින්ගෙන් පැමිණිලි ලබා ගන්නේ නම් ඒවා සලකා බැලීම වටී නමුත් අනෙක් සියල්ල විසඳා ඇත්නම් පමණි, එනම්:

  • කේතය හොඳින් ලියා තිබේද?
  • කිසිදු ගැටළුවක් නොමැතිව යෙදුමට එහි දත්ත වෙත ප්‍රවේශ විය හැකිද?
  • වඩා හොඳ ඇල්ගොරිතමයක් භාවිතා කළ හැකිද?

එම ප්‍රශ්න සියල්ලටම පිළිතුරු ලබා දී ඇති අතර ඔබට තවමත් ක්‍රියාකාරීත්වයේ ගැටළු තිබේ නම්, එය කේතයේ ක්ෂුද්‍ර ප්‍රශස්තිකරණය භාවිතා කිරීම ආරම්භ කිරීමට කාලය විය හැකි නමුත් අනෙක් වෙනස්කම් නම් (එනම් වඩා හොඳ කේතය, වඩා හොඳ ඇල්ගොරිතම යනාදිය) ඔබව දැල්වීමට යාමයි. ක්ෂුද්‍ර ප්‍රශස්තිකරණයට වඩා කාර්ය සාධන ලාභයක්.


5

ක්‍රියාත්මක කිරීමේ වේගය වැඩසටහනක ගුණාත්මක භාවයට දායක වන බොහෝ සාධක වලින් එකකි. බොහෝ විට වේගය කියවීමේ හැකියාව / නඩත්තු කිරීමේ හැකියාව සමඟ ප්‍රතිලෝම සහසම්බන්ධයක් ඇත. සෑම අවස්ථාවකම පාහේ කේතය මිනිස් කියවිය හැකි වන පරිදි කේතය පවත්වා ගත හැකිය. වේගය අත්‍යවශ්‍ය අවශ්‍යතාවයක් වන විට කියවීමේ හැකියාව අඩපණ කළ හැකි එකම අවස්ථාවයි. සම්පූර්ණ කියවීමේ හැකියාව / නඩත්තු කිරීමේ හැකියාව වඩා වේගයෙන් කේතය සෑදීමේ අවශ්‍යතාවය කිසිසේත්ම අදාළ නොවේ, නමුත් එය අවශ්‍ය අවස්ථා තිබේ. මතක තබා ගත යුතු ප්‍රධානම දෙය නම්, ක්ෂුද්‍ර ප්‍රශස්තිකරණය කළ කේතය බොහෝ විට අනවසර කේතයක් වන අතර, එබැවින් කොතැනක හෝ නිශ්චිත අවශ්‍යතාවයක් නොමැති නම්, ගැටළුව නිරාකරණය කිරීම සෑම විටම පාහේ වැරදි ක්‍රමයකි. නිදසුනක් ලෙස, CRUD මෙහෙයුම් වලදී තත්පර .5 සහ තත්පර 1 ක්‍රියාත්මක කිරීමේ වේලාවන් අතර වෙනස පරිශීලකයා කිසි විටෙකත් නොදකිනු ඇත. එම තත්පර .5 වෙත ළඟා වීමට ඔබට එකලස් කිරීමේ-අන්තර්-හැක්ෆෙස්ට් වෙත යාමට අවශ්‍ය නොවේ. ඔව්, මට වැඩ කිරීමට හෙලිකොප්ටරයක් ​​පියාසර කළ හැකි අතර එය 10 ගුණයක් වේගවත් වනු ඇත, නමුත් මිල හා හෙලිකොප්ටරය පියාසර කිරීම වඩා දුෂ්කර බැවින් මම එසේ නොකරමි.ඔබ අනවශ්‍ය ලෙස කේතය ක්ෂුද්‍ර-ප්‍රශස්තිකරණය කරන විට, ඔබ කරන්නේ මෙයයි: අනවශ්‍ය සංකීර්ණතාවයක් සහ අතිරික්ත ඉලක්කයක් කරා ළඟා වීමට පිරිවැය එකතු කිරීම.


5

ඔබ සීමාවකට මුහුණ දෙන විට ක්ෂුද්‍ර ප්‍රශස්තිකරණය වැදගත් වේ. ඔබ සැලකිලිමත් වන දෙය මතකය විය හැකිය, ප්‍රති put ල විය හැකිය, ප්‍රමාද විය හැකිය, නැතහොත් විදුලි පරිභෝජනය විය හැකිය. මේවා පද්ධති මට්ටමේ ලක්ෂණ බව සලකන්න; සෑම ක්‍රියාවක්ම සෑම ආකාරයකින්ම ප්‍රශස්තිකරණය කිරීමට ඔබට අවශ්‍ය නැත.

කාවැද්දූ පද්ධතිවලට ක්ෂුද්‍ර ප්‍රශස්තිකරණය අවශ්‍ය වන්නේ අවහිරතා වඩාත් පහසුවෙන් පහර දෙන බැවිනි. කෙසේ වෙතත්, එහි පවා ක්ෂුද්‍ර ප්‍රශස්තිකරණය ඔබට ලැබෙන්නේ මෙතෙක් පමණි; නරක සැලසුමකින් ඔබේ මාර්ගය ක්ෂුද්‍ර ප්‍රශස්තිකරණය කළ නොහැක. පද්ධතියක හොඳ සැලසුම පිළිබඳ කාරණය නම් සමස්තයක් ලෙස පද්ධතිය ගැන ඔබට තර්ක කළ හැකිය. ක්ෂුද්‍ර ප්‍රශස්තිකරණය අවශ්‍ය වන සංරචක පිළිවෙලට නිරාවරණය කර පද්ධතියේ සැලසුමට පටහැනි නොවන ආකාරයෙන් ප්‍රශස්තිකරණය කළ යුතුය.

අද කුඩා "කාවැද්දූ" පද්ධති අතීතයේ වැක්සන් හෝ පීඩීපී -11 යානා වලට ඉතා ආසන්න විය හැකි බව සලකන්න , එබැවින් මෙම ගැටළු වඩාත් සුලභ විය. නූතන පොදු වාණිජ පරිගණනය කරන නවීන පොදු අරමුණු පද්ධතියක් මත, ක්ෂුද්‍ර ප්‍රශස්තිකරණය දුර්ලභ වේ. මෙය බොහෝ විට ඔබේ පියා ගන්නා තනතුරට පත්වීමට හේතුවකි.

කෙසේ වෙතත්, ඔබ නැනෝ තත්පර, මිලි තත්පර, තත්පර හෝ පැය සමඟ ගනුදෙනු කරන්නේද යන්න ගැටළුවක් නොවේ; ගැටළු එක හා සමානයි. ඒවා පද්ධතියේ සන්දර්භය තුළ සහ ඔබ සාක්ෂාත් කර ගැනීමට උත්සාහ කරන දේ ඇගයීමට ලක් කළ යුතුය.

මෙය ක්ෂුද්‍ර ප්‍රශස්තිකරණය අවශ්‍ය වූ අවස්ථාවක් සඳහා ස්ටැක් පිටාර ගැලීම පිළිබඳව මා විසින් මෑතකදී පිළිතුරු දුන් ප්‍රශ්නයකට උදාහරණයකි : කාවැද්දූ පද්ධතියක් සඳහා විවෘත කේත වීඩියෝ කේත .


4

ක්ෂුද්‍ර ප්‍රශස්තිකරණයේ ඇති ලොකුම ගැටලුව නම් එය නඩත්තු කිරීමට අපහසු කේතයක් ලිවීමට ඔබව යොමු කිරීමයි.

තවත් ගැටළුවක් වන්නේ පරිගණක වින්‍යාසය මත පදනම්ව සමහර විට ඔබේ ක්ෂුද්‍ර ප්‍රශස්තිකරණය 'ප්‍රශස්තිකරණය' නොමැතිව නරකම කාර්ය සාධනයක් තිබිය හැකිය.

බොහෝ ක්ෂුද්‍ර ප්‍රශස්තිකරණය කිරීමෙන් ඔබට වැදගත් නොවන දෙයකට එරෙහිව සටන් කිරීමට බොහෝ කාලයක් ගත වේ.

වඩා හොඳ ප්‍රවේශයක් වන්නේ පිරිසිදු කේතයක් සෑදීම, නඩත්තු කිරීම පහසුය, සහ ඔබට කාර්ය සාධන ගැටලු ඇත්නම් ඔබේ කේතය මන්දගාමී වන්නේ කුමක් දැයි සොයා ගැනීමට පැතිකඩක් ධාවනය කරන්න. ඇත්තෙන්ම නරක කුමක්දැයි හරියටම දැන ගැනීමෙන් ඔබට එය නිවැරදි කළ හැකිය.

මෝඩ කේත ලිවීමට ක්ෂුද්‍ර ප්‍රශස්තිකරණය නොකිරීම නිදහසට කරුණක් බව මම නොකියමි.


4

ඔබ මිලි තත්පර ගැන කරදර වීමට පටන් ගන්නේ නම්, ඔබ PHP අතහැර දමා ඒ වෙනුවට C හෝ එකලස් කිරීම භාවිතා කළ යුතුය. මට මෙය කිරීමට අවශ්‍ය බව නොවේ, එවැනි සංඛ්‍යා සාකච්ඡා කර ස්ක්‍රිප්ටින් භාෂාවක් භාවිතා කිරීම තේරුමක් නැත. ඔබගේ කේතය බොහෝ විට කෙසේ හෝ මෙම විධානය සමඟ නැවත ක්‍රියාත්මක වේද?

මෙහි පාරිසරික සාධක සැක සහිත ය, එම සේවාදායකයන් කෙසේ හෝ 24/7 ධාවනය වන අතර ඒවා ඇත්ත වශයෙන්ම යමක් ක්‍රියාවට නංවන්නේ නම් එය වැදගත් වන්නේ එය ඉතා දිගු කාලයක් තිස්සේ ක්‍රියාත්මක වන කාර්යයක් නම් පමණි.

බොහෝ විට ඔබගේ කාර්යාලයේ ඇති ආලෝකය සහ අප සියලු දෙනා ප්‍රශ්න හා පිළිතුරු ටයිප් කරන විට භාවිතා කළ ශක්තිය, ඔබේ යෙදුම් සඳහා සාධාරණ ලෙස යෙදිය හැකි ඕනෑම ආකාරයක ක්ෂුද්‍ර ප්‍රශස්තිකරණයකට වඩා වැඩි ශක්තියක් භාවිතා කරයි.


+1 ආලෝකය නිවා දැමීම හෝ ප්‍රශ්නවලට පිළිතුරු නොදීම.
බොස්

4

කාර්යය සඳහා හොඳම, සරල ඇල්ගොරිතම ඔබ තෝරා ගත යුතුය. එය සරල වීමට හේතුව කේතය කියවිය හැකි ලෙස තබා ගැනීමයි. එය හොඳම විය යුතු හේතුව, නරක ධාවන කාල ලක්ෂණ වලින් ආරම්භ වීම වළක්වා ගැනීමයි. ඔබට විශාල දත්ත කට්ටල ඇති බව ඔබ දන්නා විට අන්ධ ලෙස බබල්සෝර්ට් තෝරා නොගන්න. කෙසේ වෙතත්, ඉඳහිට මූලද්රව්ය 10 ක් වර්ග කිරීම සඳහා එය හොඳයි.

එවිට, පැතිකඩ අංක වලින් ඔබ තෝරාගත් හොඳම, සරල ඇල්ගොරිතම ප්‍රමාණවත් නොවන බව පෙන්නුම් කරන්නේ නම්, ඔබට ප්‍රශස්තිකරණය ආරම්භ කළ හැකිය (එය සාමාන්‍යයෙන් කියවීමේ පිරිවැය ලෙස වේ).


ඔබේ දත්ත ඔවුන්ගේ අවසාන ගමනාන්තයට වඩා not තින් නොවන අයාලේ යන මූලද්‍රව්‍ය කිහිපයක් සමඟ ආසන්න වශයෙන් වර්ග කර ඇති විට බබල්සෝර්ට් ක්වික්සෝර්ට් හෝ ඒකාබද්ධ කිරීමට වඩා හොඳ විය හැකිය. අනෙක් සියලුම කාර්යයන් සඳහා, ඔබේ ක්‍රමලේඛන භාෂාව ඔබට සපයන බිල්ට් වර්ග කිරීමේ ශ්‍රිතය භාවිතා කළ යුතුය; එය ආරම්භ කිරීම සඳහා ඇති සරලම ක්‍රමයයි (සහ බොහෝ භාෂාවල බිල්ට් වර්ග කිරීමේ ශ්‍රිතය හොඳ කාර්ය සාධනයක් ඇත). නරක උපදෙස් : start out with bad runtime characteristic, හිතාමතාම නරක ධාවන කාල ලක්ෂණයකින් ආරම්භ නොකරන්න.
බොරු රයන්

IeLie, ඔබේ දත්ත ආසන්න වශයෙන් වර්ග කර ඇති බවත්, ඔබට බුබුලුසෝර්ට් භාවිතා කළ හැකි බවත් ඔබ දන්නේ නම්, ඔබ ඔබේ ඇල්ගොරිතම අන්ධ ලෙස තෝරා නොගනී ... යතුරු ලියනය පෙන්වා දීමට ස්තූතියි.

4

මම එය කලින් පවසා ඇති අතර, මම එය මෙහි කියමි: "නොමේරූ ප්‍රශස්තකරණය සියලු නපුරේ මුල වේ" . මෙය ඕනෑම ක්‍රමලේඛකයෙකුගේ මනසෙහි කේන්ද්‍රයේ ඇති නීති වලින් එකක් විය යුතුය.

කේතයට, සෑම විටම එය දැනට පවතින වේගයට වඩා වේගවත් විය හැකිය. ඔබ විශේෂිත චිපයක් මතකයේ තබාගෙන එකලස් කිරීම හැර, සෑම විටම ප්‍රශස්තිකරණය තුළින් ලබා ගත හැකි යමක් තිබේ. කෙසේ වෙතත්, ඔබ කරන සෑම දෙයක් සඳහාම අතින් ඇසුරුම් කිරීමට ඔබට අවශ්‍ය නොවන්නේ නම්, ප්‍රමාණාත්මක ඉලක්කයක් තිබිය යුතුය, එය ඔබ හමු වූ පසු, “එය ප්‍රමාණවත්” යැයි කියමින් ප්‍රශස්තිකරණය නවත්වන්න. ඔබ මුහුණට.

ලස්සන, අලංකාර, අතිශයින්ම ක්‍රියාකාරී කේතයක් ක්‍රියා නොකරන්නේ නම් එය නිෂ් less ල ය (සහ “වැඩ” යන්නෙන් මා අදහස් කරන්නේ අපේක්ෂිත සියලු යෙදවුම් ලබා දී අපේක්ෂිත ප්‍රතිදානය නිපදවීමයි). එබැවින්, වැඩ කරන කේතයක් නිෂ්පාදනය කිරීම සෑම විටම පළමු ප්‍රමුඛතාවය විය යුතුය. එය ක්‍රියාත්මක වූ පසු, ඔබ කාර්ය සාධනය තක්සේරු කරන අතර, එය නොමැති නම් එය වඩා හොඳ කිරීමට ක්‍රම සොයමින්, එය ප්‍රමාණවත් තරම් හොඳය.

කාර්ය සාධනය කෙරෙහි බලපාන පෙර තීරණය කිරීමට ඔබට කළ යුතු කරුණු කිහිපයක් තිබේ; මෙම විසඳුම ක්‍රියාත්මක කිරීම සඳහා ඔබ භාවිතා කරන භාෂාව / ධාවන කාලය වැනි මූලික තීරණ. මේවායින් බොහොමයක් එක් ක්‍රමයක් හා තවත් ක්‍රමයක් ඇමතීමට වඩා විශාලත්වයේ ඇණවුම් මඟින් කාර්ය සාධනය කෙරෙහි බලපායි. අවංකවම, පීඑච්පී, තිර රචනය කරන ලද භාෂාවක් ලෙස දැනටමත් කාර්ය සාධනයට ලක්ව ඇත, නමුත් සී / සී ++ හි පහළ සිට ඉහළට ස්ක්‍රිප්ට් කරන ලද අඩවි ඉතා ස්වල්පයක් බැවින් එය ඔබ තෝරා ගත හැකි වෙනත් තාක්ෂණයන් හා සැසඳිය හැකිය (ජාවා සර්වට්ලට්, ඒඑස්පී. , ආදිය).

ඊට පසු, I / O පණිවිඩ ප්‍රමාණය ඔබේ ඊළඟ විශාලතම කාර්ය සාධන ler ාතකයා වේ. දෘඩ තැටිය, අනුක්‍රමික වරාය, ජාල පයිප්ප ආදියෙන් ඔබ කියවන දේ ලිවීම ප්‍රශස්ත කිරීම සාමාන්‍යයෙන් I / O මෙහෙයුම් පිටුපස ඇති ඇල්ගොරිතම කාර්යක්ෂමව පැවතියද විශාල ප්‍රමාණයේ ඇණවුම් මඟින් වැඩසටහනේ ධාවන කාලය වැඩි දියුණු කරනු ඇත. ඊට පසු, ඇල්ගොරිතමයේ බිග්-ඕ සංකීර්ණතාව අඩු කරන්න, ඉන්පසු ඔබ අනිවාර්යයෙන්ම කළ යුතු නම්, අඩු වියදම් ක්‍රම ඇමතුම් තෝරා ගැනීමෙන් සහ අඩු මට්ටම්වල වෙනත් තීරණාත්මක තීරණ ගැනීමෙන් ඔබට “ක්ෂුද්‍ර ප්‍රශස්තිකරණය” කළ හැකිය.


2
+1 වැඩ කරන කේතය නිපදවීම සැමවිටම පළමු ප්‍රමුඛතාවය විය යුතුය.
බොස්

2
E කීත්, ඇත්ත වශයෙන්ම නුත් එය මුලින් කී අතර ඔහු ඊට වඩා ටිකක් වැඩි යමක් කීවේය.

"එය වැඩ කරන්න, ඉන්පසු එය වැඩ කිරීමට අවශ්‍ය තරම් වේගයෙන් වැඩ කරන්න", ඇනොන්.
ජෝන් සෝන්ඩර්ස්

1
ඇත්ත වශයෙන්ම ආගම සියලු නපුරේ මුල වේ, නමුත් මම කණගාටු වෙමි.
තෝමස් එඩින්

4

ඔබේ පියා විශ්‍රාමික ක්‍රමලේඛකයෙකු බව ඔබ සඳහන් කරයි. මේන්ෆ්‍රේම් ලෝකයේ වැඩ කළ ක්‍රමලේඛකයන්ට කාර්ය සාධනය ගැන දැඩි සැලකිල්ලක් දැක්විය යුතුව තිබුණි. මට මතකයි එක්සත් ජනපද නාවික හමුදාවේ ක්‍රියාකාරකමක් හැදෑරූ විට ඔවුන්ගේ ප්‍රධාන රාමුව දෘඩාංග වලින් සීමා වූ අතර එය එක් පරිශීලකයෙකුට 64 KB මතකයක් විය. එම ක්‍රමලේඛන ලෝකයේ ඔබට කළ හැකි සෑම කුඩා දෙයක්ම සොයා බැලිය යුතුය.

දැන් දේවල් බෙහෙවින් වෙනස් වන අතර බොහෝ ක්‍රමලේඛකයන්ට ක්ෂුද්‍ර ප්‍රශස්තිකරණය ගැන එතරම් කරදර වීමට අවශ්‍ය නැත. කෙසේ වෙතත්, කාවැද්දූ පද්ධති ක්‍රමලේඛකයින් තවමත් කරන අතර දත්ත සමුදායන් තවමත් ප්‍රශස්ත කේත භාවිතා කිරීම අවශ්‍ය වේ.


3

කේතය ලිවිය යුත්තේ එය කරන්නේ කුමක්ද යන්න පිළිබඳව නිරවද්‍ය ලෙස ය. එවිට, නම් සහ එකම නම් එය ප්රමාද වැඩි ය, පිටුපස හා දක්වා වේගය එය යන්න. කේතය සෑම විටම පසුව වේගවත් කිරීමට වෙනස් කළ හැකිය, එය තේරුම් ගත හැකි නම්- නමුත් වාසනාව එය වෙනස් කරන්නේ නම් එය පැහැදිලි නම් පැහැදිලි වේ.


3

එය වැදගත් නම්:

1) යමෙකුගේ ජීවිතය ඔබගේ කේතය මත රඳා පවතී. යමෙකුගේ හෘද ස්පන්දන වේගය මොනිටරය තුළ ක්‍රියාත්මක කිරීමට මීටර් 25 ක් ගතවන කාර්යයක් බොහෝ විට නරක අදහසකි.

මම පෞද්ගලිකව ද්වි පාර්ශ්වික ප්‍රවේශයක් ගනිමි - කියවිය හැකි භාවයට බලපාන්නේ නැති ඔබට කළ හැකි ක්ෂුද්‍ර ප්‍රශස්තිකරණයන් ඇත - පැහැදිලිවම ඔබට ඒවා භාවිතා කිරීමට අවශ්‍යය. නමුත් එය කියවීමේ හැකියාව කෙරෙහි බලපාන්නේ නම්, නවත්වන්න - ඔබට වැඩි ප්‍රතිලාභයක් නොලැබෙන අතර දිගු ගමනේදී එය නිදොස් කිරීමට වැඩි කාලයක් ගතවනු ඇත.


2
ඔබේ උදාහරණයේ සුළු කරුණු කිහිපයක් පමණි: හෘද ස්පන්දන වේගය මොනිටරයක මීටර් 25 ක් ගතවන විට අවශ්‍ය ප්‍රතිචාර කාලය සමඟ අවශ්‍ය අනෙකුත් කාර්යයන් සිදුවිය හැකි තාක් කල් එය ගැටළුවක් නොවනු ඇත. බාධා කිරීම් මේ සඳහා හොඳයි. මිනිස් පරිභෝජනය සඳහා සංදර්ශකයක් යාවත්කාලීන කිරීම සඳහා සැබෑ ලෝකයේ සිදුවීම් අධීක්ෂණය කරන දෙයක් සඳහා 25ms ප්‍රමාද වීම ගැටලුවක් නොවේ.
janm

3

කේතීකරණයේදී ක්ෂුද්‍ර ප්‍රශස්තිකරණය වැදගත් ද?

නැත, ජේවීඑම් සහ .නෙට් වැනි වේදිකා අථත්‍ය යන්ත්‍රයක් සඳහා කේත ලියා ඇති අතර එමඟින් ක්‍රියාත්මක කිරීම ප්‍රශස්ත කිරීමට උත්සාහ කිරීම එතරම් සාර්ථක නොවනු ඇත. සංවර්ධකයාගේ ඩෙස්ක්ටොප් එකේ ප්‍රශස්ත දේ සේවාදායකයක සමාන නොවේ. මෙහි තවත් කරුණක් සඳහා දෘඩාංග වලින් කොතරම් දුරස් වී ඇත්දැයි බලන්න. සලකා බැලිය යුතු දෙයකට දෘඩාංගවල විවිධත්වය ලබා දී ඇත, වසරකට අඩු කාලයකදී නව මාදිලියක් එළියට එන විට CPU හෝ GPU වැනි නිශ්චිත චිප සඳහා කේත ප්‍රශස්තිකරණය කිරීම කෙතරම් යථාර්ථවාදීද?

මෙහිදී සලකා බැලිය යුතු තවත් ප්‍රශ්නයක් වන්නේ කුමන මෙට්‍රික් එකකින් මනිනු ලබන කාර්ය සාධනයයි: ක්‍රියාත්මක කිරීමේ වේගය, ක්‍රියාත්මක කිරීමේදී භාවිතා කරන මතකය, නව විශේෂාංග සංවර්ධනය කිරීමේ වේගය, සම්පාදනය කරන ලද හෝ සම්පාදනය කරන ලද ආකාරවලින් සේවාදායකයක කේත පදනමේ ප්‍රමාණය, පරිමාණය, නඩත්තු කිරීමේ හැකියාව යනාදිය. .? පුළුල් ලෙස ගතහොත් ප්‍රශ්නය සුළුපටු වනු ඇත, නමුත් යම් ආකාරයකින් මැනිය හැකි තාක් දුරට ඕනෑම දෙයක් විය හැකි තරම් කාර්ය සාධනයක් ලබා ගැනීමට ඔබ කොතරම් පුළුල් ලෙස අදහස් කළේදැයි මට විශ්වාස නැත.


සමහර ක්ෂුද්‍ර ප්‍රශස්තිකරණයන් ක්‍රියාත්මක විය හැකි අතර සමහර ඒවා ක්‍රියාත්මක නොවිය හැකි අතර නව කාර්යයන් හෝ දෝෂ නිවැරදි කිරීම වැනි ඉහළ ප්‍රමුඛතාවයක් ලෙස දැකිය හැකි වෙනත් කාර්යයන් හා සසඳන විට එවැනි වැඩක් කිරීම කොතරම් වටිනවාදැයි කෙනෙකුට සිතිය හැකිය. අනෙක් ප්‍රශ්නය වනුයේ දෘඩාංග හෝ මෘදුකාංග යාවත්කාලීන කිරීම මඟින් එම ප්‍රශස්තිකරණ සමහරක් බිඳ දැමිය හැකිද යන්නයි.


1
JVM සහ .NET වැනි වේදිකාවල ඔබට නියත වශයෙන්ම ක්ෂුද්‍ර ප්‍රශස්තිකරණය කළ හැකි බව සලකන්න , ඒවා තරමක් වෙනස් ආකාරයන් ගනී. ඔබ වඩාත් නවීන, ඉහළ ප්‍රශස්තිකරණ සම්පාදකයෙකු සමඟ සංසන්දනය කර පැරණි හා සරල සී සම්පාදකයෙකු නම් එය සත්‍ය වේ: පරිශීලකයාට කළ හැකි ප්‍රශස්තිකරණය වෙනස් ලෙස පෙනෙනු ඇත.
ජෝකිම් සෝවර්

1

හොඳ ක්‍රමලේඛනය සහ ක්ෂුද්‍ර ප්‍රශස්තිකරණය අතර විශාල වෙනසක් ඇතැයි මම සිතමි.

එකම කාර්යය කිරීමට ක්‍රම දෙකක් තිබේ නම්, එකක් අනෙකට වඩා වේගවත් වීම සහ දෙකම එකම කියවීමේ හැකියාව ඇති නම්, ඔබ වේගයෙන් භාවිතා කළ යුතුය. සැමවිටම. මෙය හොඳ වැඩසටහන්කරණයකි. ගැටලුවක් විසඳීම සඳහා වඩා හොඳ ඇල්ගොරිතමයක් භාවිතා නොකිරීමට හේතුවක් නැත. එය ලේඛනගත කිරීම පවා පහසුය: ඇල්ගොරිතමයේ නම දෙන්න, සෑම කෙනෙකුටම එය ගූගල් කර එය ක්‍රියාත්මක වන ආකාරය පිළිබඳ වැඩිදුර තොරතුරු සොයාගත හැකිය.

හොඳ ඇල්ගොරිතම දැනටමත් ප්‍රශස්ත කර ඇත. ඔවුන් වේගවත් වනු ඇත. ඒවා කුඩා වනු ඇත. ඔවුන් අවශ්‍ය අවම මතකය භාවිතා කරනු ඇත.

ඒවා භාවිතා කිරීමෙන් ඔබේ වැඩසටහනට තවමත් එම ක්‍රියාකාරීත්වය නොමැති වුවද, ඒවා ඔබට ක්ෂුද්‍ර ප්‍රශස්තිකරණය කිරීම සලකා බැලිය හැකිය. ක්ෂුද්‍ර ප්‍රශස්තිකරණය සඳහා ඔබට භාෂාව දැන සිටිය යුතුය.

දෘඩාංග සඳහා තවත් මුදල් වියදම් කිරීමට සෑම විටම ඉඩකඩ තිබේ. දෘඩාංග මිළ අඩුයි, ක්‍රමලේඛකයින් මිල අධිකයි . ඔබට දෘඩාංග මිලදී ගත හැකි විට ප්‍රශස්තිකරණය කිරීමෙන් වැඩි කාලයක් / මුදල් වැය නොකරන්න.


1

IMHO කේත කියවීමේ හැකියාව ක්ෂුද්‍ර ප්‍රශස්තිකරණයට වඩා වැදගත් වන්නේ බොහෝ අවස්ථාවන්හිදී ක්ෂුද්‍ර ප්‍රශස්තිකරණය එය වටින්නේ නැති බැවිනි.

සංවේදී නොවන ක්ෂුද්‍ර ප්‍රශස්තිකරණය පිළිබඳ ලිපිය :

අප බොහෝ දෙනා මෙන්, මුද්‍රණය ප්‍රතිරාවය මගින් ප්‍රතිස්ථාපනය කිරීම, ++ $ i $ i ++ හෝ තනි උපුටා දැක්වීම් වලින් ද්විත්ව උපුටා දැක්වීම් වැනි සංවේදී නොවන ක්ෂුද්‍ර ප්‍රශස්තිකරණය පිළිබඳ බ්ලොග් සටහන් කියවීමට මම වෙහෙසට පත්ව සිටිමි. මන්ද? 99.999999% කාලය නිසා එය අදාල නොවේ. මන්ද? 99.99% ක කාලයක් නිසා, ඔබ ඒපීසී වැනි පීඑච්පී ඇක්සලරේටරයක් ​​ස්ථාපනය කිරීම වඩා හොඳය, නැතහොත් මෙම අතුරුදහන් වූ දර්ශක ඔබේ දත්ත සමුදා තීරුවලට එක් කරන්න, නැතහොත් ඔබට මුල් පිටුවෙහි ඇති දත්ත සමුදා ඉල්ලීම් 1000 වළක්වා ගැනීමට උත්සාහ කරන්න.

මුද්‍රණය තවත් එක් කේතයක් භාවිතා කරයි, මන්ද එය ඇත්ත වශයෙන්ම යමක් ලබා දෙයි. ප්‍රතිරාවය මුද්‍රණයට වඩා වේගවත් බව අපට නිගමනය කළ හැකිය. නමුත් එක් ඔප්කෝඩ් එකකට කිසිවක් වැය නොවේ.

මම නැවුම් වර්ඩ්ප්‍රෙස් ස්ථාපනයකට උත්සාහ කර ඇත්තෙමි. මගේ ලැප්ටොප් පරිගණකයේ "බස් දෝෂයක්" සමඟින් එය අවසන් වීමට පෙර ස්ක්‍රිප්ට් එක නතර වේ, නමුත් ඔප් කේත ගණන දැනටමත් මිලියන 2.3 කට වඩා වැඩි විය. කිව්වා ඇති.

එබැවින් බොහෝ අවස්ථාවන්හීදී ක්ෂුද්‍ර ප්‍රශස්තිකරණය මිලියන ගණනක් අතර 1 මෙහෙයුමක් ඉතිරි කරයි, නමුත් කියවීමේ හැකියාව නරක අතට හැරේ.


1

වෙනත් පිළිතුරු මුදල් මත නිවැරදි ය. නමුත් භාෂාවේ / රාමු ව්‍යුහයන්ගේ හැසිරීම පිළිබඳ අවබෝධයක් පිළිබිඹු කරන නොමේරූ ප්‍රශස්තිකරණය / ක්ෂුද්‍ර ප්‍රශස්තිකරණය සහ ලිවීමේ කාර්ය සාධන කේතය වෙන්කර හඳුනාගත යුතු තවත් කරුණක් මම එකතු කරමි (සමාවන්න, අන්තිම එක වචනයක්වත් සොයාගත නොහැකි විය) . අන්තිම එක කියන්නේ ප්රායෝගිකව කේතනය හොඳ හා එක් සාමාන්යයෙන් යුතුය!

මම පැහැදිලි කරන්නම්. නරක ප්‍රශස්තිකරණය (නොමේරූ / ක්ෂුද්‍ර ප්‍රශස්තිකරණය කියවන්න) ඔබ කේතයේ කොටස් පැතිකඩකින් තොරව ප්‍රශස්තිකරණය කරන විට ඒවා ඇත්ත වශයෙන්ම බාධක දැයි දැන ගැනීමට නොවේ. එය ඔබගේ උපකල්පන, අසන්නන් සහ ලේඛනගත නොකළ හැසිරීම් මත පදනම්ව ප්‍රශස්තිකරණය කරන විට ය. එය කොතරම් කුඩා වුවත් එය ලේඛනගත කර වඩා කාර්යක්ෂම / තර්කානුකූලව යමක් කරන්නේ නම්, මම එය හොඳ ප්‍රශස්තිකරණයක් ලෙස හඳුන්වමි . අනෙක් අය ප්‍රකාශ කර ඇති පරිදි, මේ දෙකටම හොඳ ව්‍යාපාරයක් උපයා ගැනීම සම්බන්ධයෙන් අවාසි සහ වාසි කිසිවක් නැත, නමුත් කියවීමේ හැකියාව මුළුමනින්ම පරාජය නොකරන්නේ නම් මම තවමත් කරන්නේ දෙවැන්න මිස කලින් නොවේ . ඔව් කියවීමේ හැකියාව / නඩත්තු කිරීමේ හැකියාව අතිශයින්ම වැදගත් වන අතර එය ඔබ රේඛාව අඳින්නේ කොතැනින්ද යන්න ගැන ය.

හොඳ සහ නරක යන දෙකම ප්‍රශස්තකරණය කිරීමේ නිෂ් til ල භාවය ලෙස මම මෙහි අන් අය ඉදිරිපත් කළ කරුණු නැවත අවධාරණය කරමි:

  1. විශේෂිත ගැටලුවකට ඔබගේ යැපීම් වෙනස් විය හැකි අතර ඔබේ යෙදුමේ තාර්කික කොටස සම්පූර්ණ කිරීමට පෙර ප්‍රශස්තිකරණය සඳහා වැය කරන ඕනෑම වේලාවක් කාලය නාස්තියකි. මම අදහස් කළේ සාපේක්ෂව මුල් අවධියේදී ප්‍රශස්තිකරණය කිරීමයි. අද ඔබ සතුව ඇති List<T>අතර ඔබගේ යෙදුම නැව්ගත කරන කාලය වන විට ඔබට එය වෙනස් කිරීමට සිදුවිය. LinkedList<T>දැන් සියලු මිණුම් සලකුණු කාලය හා ශ්‍රමය නාස්ති කිරීමකි.

  2. බොහෝ විට ඔබගේ යෙදුමේ සැබෑ බාධකය (මැනිය හැකි වෙනසක් ලෙස කියවන්න) ඔබේ කේතයෙන් 5% ක් විය හැකිය (වැඩි වශයෙන් වර්ග අඩි) සහ අනෙක් 95% ප්‍රශස්තිකරණය කිරීමෙන් ඔබේ ගනුදෙනුකරුවන්ට කිසිදු ප්‍රතිලාභයක් නොලැබේ.

  3. සාමාන්‍යයෙන් “තාක්‍ෂණිකව” වඩා හොඳ ක්‍රියාකාරී කේතයක් යනු වඩාත් වාචිකතාවයෙන් අදහස් වන අතර එයින් අදහස් කරන්නේ වඩාත් දෝෂ සහිත කේතයක් වන අතර එයින් අදහස් කරන්නේ වඩා දුෂ්කර නඩත්තු කිරීමක් සහ වැඩි කාලයක් ගත කිරීම යන්නෙන් අදහස් වන්නේ ඔබ අඩු මුදල් උපයන බවයි.

  4. මුළු ලෝකයටම ඔබ ඉතිරි කරන කාබන් අඩිපාර 1% ක කාර්යසාධනයක් ලබා ගැනීම හරිතාගාර වායූන් මගින් පහසුවෙන් වාමනය කරනු ලැබේ, එම කේතය නිදොස් කිරීම සහ නඩත්තු කිරීම සඳහා ඔබේ කණ්ඩායමට විමෝචනය කළ යුතුය.

විශේෂයෙන් නරක ප්‍රශස්තිකරණයේ නිෂේධන :

  1. එය බොහෝ විට ඔබ අපේක්ෂා කරන කාර්ය සාධනය ලබා නොදේ. ප්‍රශස්තිකරණය වැරදී ඇති SO හි මෙම ප්‍රශ්නය බලන්න . ඇත්ත වශයෙන්ම එය අහිතකර බලපෑම් ඇති කළ හැකිය . ලේඛනගත නොවූ හැසිරීමේ ගැටලුව එයයි.

  2. බොහෝ විට නවීන සම්පාදකයින් එය කෙසේ හෝ ඔබ වෙනුවෙන් කරනු ඇත.

නරක සහ හොඳ ප්‍රශස්තිකරණය පිළිබඳ උදාහරණ කිහිපයක් මම දෙන්නෙමි:

නරක -

  1. වෙනුවට කුඩා නිඛිල වර්ග භාවිතා කිරීම Int32.

  2. ++i වෙනුවට භාවිතා කරයි i++

  3. forඒ වෙනුවට foreach(මා දුටු නරකම, තර්කනය මුළුමනින්ම පරාජය කරයි)

  4. සංවෘත විචල්‍යයන් වළක්වා ගැනීම

    string p;
    foreach (var item in collection)
        p = ...;
    
  5. charනූල් සම්මුතියේ දී නූල් වෙනුවට භාවිතා කිරීම, වැනි:

    string me = 'i' + "me myself"; // something along that line - causes boxing
    

හොඳ (.NET ලෝකයෙන්. ස්වයං පැහැදිලි කිරීමක් විය යුතුය) -

  1. ද්විත්ව බැලීම

    if (Dictionary<K, V>.TryGetValue(K, out V))
        do something with V
    

    වෙනුවට

    if (Dictionary<K, V>.ContainsKey(K))
        do something with Dictionary<K, V>[K]
    
  2. ඒවා සියල්ලම පටවන්න

    DirectoryInfo.EnumerateFiles();
    

    වෙනුවට

    DirectoryInfo.GetFiles();
    
  3. අදියර දෙකක් වාත්තු කිරීම:

    s = o as string;
    if (s != null)
        proceed
    

    වෙනුවට

    if (o is string)
        s = (string)o;
    
  4. ඇණවුම වැදගත් නොවේ නම්

    if (counter < X || expensiveFunction())
    

    වෙනුවට

    if (expensiveFunction() || counter < X)
    
  5. බොක්සිං

    void M<T>(T o) //avoids boxing
    {
    
    }
    

    වෙනුවට

    void M(object o)
    {
    
    }
    

මේවායින් සැලකිය යුතු කාර්යසාධන ප්‍රතිලාභයක් ලැබේදැයි ඔබ මගෙන් ඇසුවොත්, මම එපා යැයි කියමි. නමුත් මෙම ඉදිකිරීම් වල හැසිරීම පිළිබඳ අවබෝධයක් ඇති බැවින් ඒවා භාවිතා කළ යුතු යැයි මම යෝජනා කරමි. ඔබට 1 ක් කළ හැකි විට ඇමතුම් දෙකක් ගන්නේ ඇයි? දාර්ශනික දෘෂ්ටි කෝණයකින් එහි හොඳ කේතීකරණ පුහුණුව. 1 සහ 3 දැඩි ලෙස කියවිය හැකි තරමට මඳක් අඩු ය, නමුත් ඒවා කියවීමේ හැකියාව තක්සේරු කරනවාද? නැත, බොහෝ නොවේ, එබැවින් මම භාවිතා කරමි. දැන් එය යතුරයි - කියවීමේ අනුපාතයට යහපත් කාර්ය සාධනයක් පවත්වා ගැනීම. එය එසේ වූ විට, ඔබ රේඛාව අඳින්නේ කොතැනින්ද යන්න ගැන ය.


1

"එය වටිනවා" සන්දර්භය අවශ්‍යයි, එදිරිව එදිරිව ලිවීම සහ කියවීම සහ නඩත්තු කිරීම කොතරම් සරලද යන්න වැනි. එය පරිශීලකයාට කොතරම් වේගවත්ද යන්න සැලකිය යුතු ලෙස ප්‍රතිචාරාත්මක, අන්තර්ක්‍රියාකාරී වන අතර ඔවුන්ට බලා සිටීමට අඩු කාලයක් අවශ්‍ය වේ.

සෝඩා කෑන් එකක් මිලදී ගැනීම සඳහා සතයක් ඉතිරි කිරීම මට එම සතයක් ඉතිරි කර ගැනීම සඳහා දුරක් ගමන් කිරීමට සිදුවුවහොත් මට එතරම් යහපතක් සිදු නොවනු ඇත. විශේෂයෙන් මේ දිනවල මම කලාතුරකින් සෝඩා පානය නොකරන බැවින්. සෝඩා මිලියනයක් මිලදී ගැනීම සඳහා එක් කෑන් එකකට සතයක් ඉතිරි කිරීම විශාල ගනුදෙනුවක් විය හැකිය.

මේ අතර දෙදෙනෙකු මා අසලම සිටින විට සතයක් ඉතිරි කර ගැනීමත්, එක් අයෙකු සතයක් සඳහා එකම දේ මිල අඩු මිලකට ලබා දෙන අතර අනෙකා එය නොකෙරේ. මම වඩා මිල අධික එකක් තෝරා ගන්නේ ඔවුන්ගේ තොප්පියට වඩා හොඳ නිසා මෝඩ නඩුවක් සේ පෙනේ අශුභවාදී.

"ක්ෂුද්‍ර ප්‍රශස්තිකරණය" යනුවෙන් හඳුන්වන පුද්ගලයින් බොහෝ විට මට පෙනී යන්නේ මිනුම්, සන්දර්භය සහ පරිශීලක-අවසාන සාකච්ඡාව යන කාරණා වලින් කුතුහලයෙන් තොර බවයි. මට මේ දිනවල නිසි ක්ෂුද්‍ර ප්‍රශස්තිකරණයක් මතක සැකැස්ම සහ ප්‍රවේශ රටා වැනි දේ හා සම්බන්ධ වන අතර ඒවා “මයික්‍රෝ” නාභිගත වී ඇති බවක් පෙනෙන්නට තිබුණද ඒවා ක්ෂුද්‍ර ලෙස ක්‍රියාත්මක නොවේ.

බොහෝ කලකට පෙර, මෙහෙයුම තත්පර 24 සිට මිලි තත්පර 25 දක්වා (960 ගුණයකින් වේගවත්) අඩු කිරීමට මට හැකි විය, සමාන ප්‍රතිදානයන් (ස්වයංක්‍රීය පරීක්ෂණ මගින් සුරක්ෂිත කර ඇත), ඇල්ගොරිතම සංකීර්ණතාවයේ කිසිදු වෙනසක් නොමැතිව, පරිමාමිතික තාප විසරණය සම සඳහා, "මයික්‍රෝ ප්‍රශස්තිකරණය" (එයින් විශාලතම දෙය වූයේ මතක සැකැස්ම වෙනස් වීමෙන් තත්පර 2 ක් පමණ වන අතර පසුව ඉතිරි ඒවා සිම්ඩ් වැනි දේවල් සහ VTune හි හැඹිලි මිස් විශ්ලේෂණය කිරීම සහ මතක සැකැස්ම නැවත සකස් කිරීම).

වුල්ෆයර් මෙහි තාක්‍ෂණය පැහැදිලි කරන අතර, ඔහු අවශ්‍ය කාලය සමඟ පොරබදයි: http://blog.wolfire.com/2009/11/volumetric-heat-diffusion-skinning/

මිනිත්තුවකටත් අඩු කාලයකට එය අඩු කර ගැනීමට ඔහු වෙහෙසෙද්දී මගේ ක්‍රියාවට මිලි තත්පර වලින් එය කිරීමට හැකි විය: රූප විස්තරය මෙහි ඇතුළත් කරන්න

මම එය "ක්ෂුද්‍ර-ප්‍රශස්තිකරණය" කිරීමෙන් පසු තත්පර 24 සිට මීටර් 25 දක්වා පහත හෙලීම, එය කාර්ය ප්‍රවාහයේ ක්‍රීඩාව වෙනස් කරන්නෙකි. දැන් කලාකරුවන්ට තත්පර 24 ක් බලා නොසිට තථ්‍ය කාලීනව එෆ්පීඑස් 30 ට වඩා වෙනස් කළ හැකිය. එය ඇත්ත වශයෙන්ම මගේ මෘදුකාංගයේ සමස්ත සැලසුමම වෙනස් කළේ මට තවදුරටත් ප්‍රගති තීරුව සහ මේ ආකාරයේ දේවල් අවශ්‍ය නොවන නිසා, ඒ සියල්ල අන්තර්ක්‍රියාකාරී විය. එබැවින් එය “ක්ෂුද්‍ර ප්‍රශස්තිකරණය” විය හැකි අතර, සියලු වැඩිදියුණු කිරීම් ඇල්ගොරිතම සංකීර්ණතාවයට කිසිදු දියුණුවක් නොමැතිව පැමිණියේය, නමුත් එය තරමක් “මෙගා ප්‍රශස්තිකරණය” නිසා කලින් වේදනාකාරී, අන්තර්ක්‍රියාකාරී නොවන ක්‍රියාවලියක් බවට පත් විය. පරිශීලකයින් වැඩ කරන ආකාරය මුළුමනින්ම වෙනස් කළ තථ්‍ය කාලීන, අන්තර්ක්‍රියාකාරී එකක් බවට.

මිනුම්, පරිශීලක අවශ්‍යතා, සන්දර්භය

මම මෙහි රොබට්ගේ ප්‍රකාශයට සැබවින්ම කැමතියි. සමහර විට මට අවශ්‍ය කාරණය ඉදිරිපත් කිරීමට මා අසමත් විය:

හොඳයි, කැමන්. මේ ආකාරයේ වෙනසක් "වටින්නේ නැත" යැයි කිසිවෙකු තර්ක කිරීමට යන්නේ නැත. ඔබට පැහැදිලි ප්‍රතිලාභයක් පෙන්වීමට හැකි විය; බොහෝ ඊනියා ක්ෂුද්‍ර ප්‍රශස්තිකරණයන්ට නොහැක.

මෙය බොහෝ විට තත්‍ය කාලීන අවශ්‍යතා සහිත ඉතා කාර්ය සාධන-විවේචනාත්මක ක්ෂේත්‍රයක වැඩ කළද, මගේ මාර්ගයෙන් පිටතට යාමට අවශ්‍ය ඕනෑම ක්ෂුද්‍ර ප්‍රශස්තිකරණයක් ලෙස මා සලකන එකම අවස්ථාව මෙයයි.

මම අවධාරණය කරන්නේ මිනුම් පමණක් නොව එහි පරිශීලක අන්තයයි. මම අමුතුම ක්‍රීඩකයෙක් වන අතර, මම මගේ වර්තමාන ක්ෂේත්‍රයට (සහ කලින් ගේම්ඩෙව්) පරිශීලකයෙකු / රසිකයෙක් ලෙස පළමුව, සංවර්ධකයා දෙවනුව පැමිණියෙමි. තාක්‍ෂණික ප්‍රහේලිකා විසඳීම වැනි ක්‍රමලේඛකයින් උද්දීපනය කරන සුපුරුදු දේවලින් මා කිසි විටෙකත් කලබල නොවීය. මම ඔවුන්ට බරක් ලෙස දුටුවෙමි, නමුත් මම වෙනත් පරිශීලකයින් සමඟ බෙදාගත් පරිශීලක-අවසන් සිහිනය තුළින් ඒවා දරාගනු ඇත. නමුත් එය මට කිසියම් දෙයක් ප්‍රශස්තිකරණය කරන්නේ දැයි තහවුරු කර ගැනීමට උපකාරී විය, එය සැබෑ ප්‍රතිලාභ ඇති පරිශීලකයින්ට සැබෑ බලපෑමක් ඇති කරයි. ඉලක්ක රහිතව ක්ෂුද්‍ර ප්‍රශස්තිකරණයට එරෙහිව එය මගේ ආරක්‍ෂාවයි.

එය ඇත්ත වශයෙන්ම මගේ මතයේ පැතිකඩ තරම්ම වැදගත් ය, මන්ද යත්, ube නකයක් මයික්‍රෝ ප්‍රශස්තකරණය කිරීම අංශක බිලියනයකට ක්ෂුද්‍ර ප්‍රශස්තකරණය කිරීම වැනි දේ කළ සගයන් මා සතුව තිබීම නිසා චරිත සහ වාහන වැනි සැබෑ ලෝක නිෂ්පාදන ආකෘතීන් යටපත් කිරීම පමණි. ඔවුන්ගේ ප්‍රති result ලය සමහර “තාක්‍ෂණික නිරූපණ” අර්ථයෙන් සිත් ඇදගන්නා සුළු වූ නමුත් සැබෑ පරිශීලකයින්ට එය කිසිසේත්ම ප්‍රයෝජනවත් නොවීය. මන්දයත් ඒවා සැබෑ ලෝක භාවිත සිද්ධීන් සමඟ නොගැලපෙන නඩු පැතිකඩ සහ මිනුම් සහ මිණුම් සලකුණු කර ඇති බැවිනි. එබැවින් පළමුව භාවිතා කරන්නන්ට වැදගත් වන්නේ කුමක්ද යන්න තේරුම් ගැනීම ඉතා වැදගත් වේ, එක්කෝ මෘදුකාංගයක් සිතීමට හා භාවිතා කිරීමට ඉගෙන ගැනීමෙන් හෝ ඔවුන් සමඟ සහයෝගයෙන් කටයුතු කිරීමෙන් (ඉතා මැනවින් දෙකම, නමුත් අවම වශයෙන් ඔවුන් සමඟ සහයෝගයෙන් කටයුතු කරන්න).


2
හොඳයි, කැමන්. මේ ආකාරයේ වෙනසක් "වටින්නේ නැත" යැයි කිසිවෙකු තර්ක කිරීමට යන්නේ නැත. ඔබට පැහැදිලි ප්‍රතිලාභයක් පෙන්වීමට හැකි විය; බොහෝ ඊනියා ක්ෂුද්‍ර ප්‍රශස්තිකරණයන්ට නොහැක.
රොබට් හාවි

1
@RobertHarvey එය ආදිය, කුමක් සමහර අය "ක්ෂුද්ර ප්රශස්තිකරණය" කෝල් ක්රියාත්මක අන්වීක්ෂීය අත්යාවශ්යම නොවේ, නමුත් එය සන්දර්භය මත එසේ රඳා තියෙන්නේ, ඉන් පසුව, කාරුණික කිරීමට මම බලාපොරොත්තු විය කාරණය විය issetඑදිරිව strlenඅවධානය වැඩි යනු නොවැදගත් සුළු පෙනේ සන්දර්භය සහ මිනුම් නොමැති වීම. :-D
ඩ්‍රැගන් බලශක්ති

1
Ro රොබට් හාර්වි, “ක්ෂුද්‍ර ප්‍රශස්තිකරණය” සඳහා negative ණාත්මක සන්දර්භයක් තිබේ නම්, එම මිනුම්, සන්දර්භයන් සහ පරිශීලක අවශ්‍යතා වලින් බැහැර වීමට නැඹුරු වන වර්ගය විය හැකි යැයි මම බලාපොරොත්තු වෙමි. අන්තිම නඩුව ගැනද මට ඉදිරියට යා හැකිය, මන්ද සගයකු සිටි නිසා කිසිවෙකු එය භාවිතා නොකළේ නම් සිසිල් දෙයකින් නිරය ප්‍රශස්ත කර ඇත. නිසි ප්‍රශස්තිකරණය සඳහා යම් පරිශීලක-අවසාන අවබෝධයක් අවශ්‍ය යැයි මම සිතමි, එසේ නොමැති නම් අපි පරිශීලකයින් නොසලකන දේවල් පැතිකඩ සහ සුසර කිරීම විය හැකිය.
ඩ්‍රැගන් බලශක්ති

1
සමහර ප්‍රශස්තිකරණයන් අවශ්‍යතාවය තද කිරීම මගින් මෙහෙයවන අතර අනෙක් ඒවා කුතුහලය (බුද්ධිමය ලුහුබැඳීම සහ වික්‍රමාන්විතය) මගින් මෙහෙයවනු ලැබේ. අපට දෙකම අවශ්‍යයි. ඩ්‍රැගන් බලශක්ති කතාවේ, එය බොහෝ විට “දැවෙන අවශ්‍යතාවයක්” නොවිය හැකිය, මන්ද කලාකරුවන් එක් එක් සංස්කරණයෙන් තත්පර 24 ක් ගතවන තුරු කිසිදු විදැහුම්කරණ ප්‍රති results ල නොදැක්වීම ගැන හයියෙන් පැමිණිලි නොකළ බැවිනි. ඇත්ත වශයෙන්ම, ක්‍රමලේඛකයෙකු වේග වාර්තාව පරාජය කිරීම සඳහා සියලු උත්සාහයන් සඳහා ආයෝජනය කරන තෙක් එය කොතරම් වේගවත් විය හැකිදැයි පරිශීලකයින් නොදැන සිටිය හැකිය. ධාවනය වන ඉල්ලුමට අපව සීමා කිරීම ව්‍යාපාර අර්ථවත් කරයි, නමුත් එසේ කිරීමෙන් විස්මිත ප්‍රශස්තිකරණ අවස්ථා හෝ ක්‍රීඩාව වෙනස් කරන්නන් මග හැරෙනු ඇත.
rwong

1
ව්‍යාපාරික හැඟීම ගැන කථා කරන විට, මුදල් ඉපැයීමේ ගැටළුව ද තිබේ. සෑම පියවරක්ම (උදා: කාර්ය සාධන ප්‍රශස්තිකරණය මත වැඩ කරන ක්‍රමලේඛකයෙකු) මුදල් වියදම් කරන අතර ව්‍යාපාර අර්ථවත් කිරීම සඳහා පිරිවැය නැවත අයකර ගත යුතුය. මේ අනුව, ක්‍රමලේඛකයා ව්‍යාපාර කළමණාකරුවෙකුගෙන් අනුමැතිය ලබා ගත යුතු නම්, ක්‍රීඩාව වෙනස් කිරීමේ වේගය වැඩිදියුණු කිරීම “විකිණීමට” හෝ “මුදල් ඉතිරි කරන්නේ” කොපමණ දැයි කෙනෙකුට ඇසිය යුතුය.
rwong

0

මම එය මේ ආකාරයෙන් තබමි - ක්ෂුද්‍ර ප්‍රශස්තිකරණය යනු කිසිසේත්ම බාධාවක් නොවන දෙයක් ප්‍රශස්තිකරණය කිරීමේ ක්‍රියාවලියකි. උදාහරණයක් ලෙස, ඔබේ වැඩසටහන මඟින් A සහ ​​B යන ශ්‍රිත දෙකක් අමතන්නේ නම්, සහ A සම්පූර්ණ කිරීමට මිලි තත්පර 100 ක් ගතවන අතර B මයික්‍රෝ තත්පර 2 ක් ගනී නම්, ඔබ දිගටම B ශ්‍රිතය ප්‍රශස්තිකරණය කරයි. එය වැදගත් පමණක් නොවේ, එය සම්පූර්ණයෙන්ම වැරදිය. නමුත් B ශ්‍රිතය ප්‍රශස්තිකරණය කිරීම ප්‍රශස්තිකරණය ලෙස හැඳින්වේ මිස ක්ෂුද්‍ර ප්‍රශස්තකරණය නොවේ. ප්‍රශස්තිකරණයේ වැදගත්කම රඳා පවතී. ඔබට වෙන කරන්න දෙයක් නැති බවත් ඔබේ වැඩසටහන දෝෂ රහිත බවත් කියන්න, එසේය, එය වැදගත් ය. නමුත් සාමාන්‍යයෙන් ඔබට ප්‍රමුඛතා ඇත. C ශ්‍රිතය එක් කිරීමට / ලිවීමට අවශ්‍ය යැයි අපි කියමු. C ලිවීම මඟින් එම ක්‍රියාකාරීත්වය නොමැතිව ඔබේ වැඩසටහන වේගවත් කිරීමට වඩා වැඩි මුදලක් උපයා ගත හැකි යැයි ඔබ සිතන්නේ නම්, ප්‍රශස්තිකරණය සඳහා යන්න. එසේ නොමැතිනම් ක්‍රියාකාරීත්වය ලුහුබඳින්න. තවද, කාර්ය සාධනය කෙරෙහි අවධානය යොමු කළ පළපුරුදු ක්‍රමලේඛකයින් ප්‍රශස්තිකරණය සඳහා වැඩි කාලයක් ගත නොකරයි, ඔවුන් වේගවත් වැඩසටහන් ලියයි. අවම වශයෙන් ඔවුන් භාවිතා කළ යුතු මෙවලම් මොනවාද සහ අර්ථ විරහිත (මයික්‍රෝ කියවන්න) ප්‍රශස්තිකරණයන් කරමින් වසර ගණනාවක් ගත නොකළ යුතු දේ ඔවුන් දනී.


මෙම ලිපිය කියවීමට තරමක් අපහසුය (පෙළ පවුර). එය වඩා හොඳ හැඩයකට සංස්කරණය කිරීමට ඔබ කැමතිද ?
gnat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.