гадит զարգացման

Վերջին շրջանում աշխատում եմ հիմնականում կոդով, այլ ոչ թե կառավարող, այնպես որ драмите որոնց ուղղել հետ кодене շատ ավելի մեծ է, քան սերվերային, նման, այնպես որ, ես որոշեցի հարվածել է մի քանի տող անհեթեթություն է, որ ինձ նյութերին համար. Ակտիվորեն պատրաստվում է նախապատրաստել իր շնորհանդեսի նախագծերի որոնք ստիպված են մի քանի բացումը դրամատիկ կտոր

  • Първото нещо което което със сигурност щеше да създаде проблеми е изключването на javascript от браузърната поддръжка. Както всяка модерна апликация така и нашия инструмент използва доста JS за Այաքսը եւ այլ դինամիկ գործընթացները, որոնք փոխանցում են интерактивности եւ ժամանակակից լավացնում է տեսողությունը և ֆունկցիոնալությունը. Մենք մտածեցինք, որ շատ որոշումներ, որպես առավել ընդունելի էր, cookie տեղեկատվություն, ապա php համոզվեք, որ տեղեկատվությունը ճիշտ է, եւ արդյոք ամեն ինչ կարգին է. Բավական գրագետ որոշմամբ, բայց ի վերջո հայտնվել է ավելի արժանավայել տարբերակ է. HTML որ կատարել է, եթե ստանում է noscript. Իմ կարծիքով, սա շատ էլեգանտ որոշումը.
<noscript>
<meta http-equiv="refresh" content="0;URL=./nojs.html" />
</noscript>

Ընդհանուր առմամբ, իրավիճակը չնչին է, եթե մենք դադարենք JS աջակցություն պետք է վերահղված է nojs.html. Պարզ է եւ շատ արդյունավետ լուծում

  • Php multhithreading – շատ nishkovosta ինչ-որ բան շատ օգտակար է պրոցեսորների ավելի հիմնական (որ ոչ մի նմուշ չի ԿԱՐԳՈՎ, բայց բազմաթիվ միջուկային համակարգերի եւ այլ բաներ, գարեջուր). Մեր ծրագրային ապահովումը ունի մի մասը, որը զբաղվում է տեղեկատվություն հավաքելով այլ API – ին եւ նրա ներմուծման, ապա մեր տվյալների. Общовзето ընդհանրապես խնդիր չէ: բացի այն, որ այն իրականացրել է ոչ պակաս, քան php-ի հետ multhithreading է cli ռեժիմով, քանի որ այդ գործընթացը dosatachno մեծ է եւ պետք է լինի ավտոմատացված համար кналга ինչ-որ մեկը դա անում է ձեռքով. Ահա այնտեղ էր դրամա է, որը կապված է фокрването գործընթացների եւ stream ոչ թե ինքն է ստեղծել մոնիտորինգի process-իսկ ինչ սցենար изчакваше, որ приключабота ստեղծել նոր. Հիմար է այն убиваше գաղափարը многопроцессорной, որ իրականում պահվածքը ոչ թե multhithreading բայց դա մանրամասները. Սկզբում մի & գործընթացից հետո, որը նշանակում է, որ աշխատանքը շարունակել, բայց սցենարը դեռ փոփոխություններ չեն եղել վարքի անհրաժեշտ և ստանդարտ եզրակացություն սցենարի պետք է վերահղված – իմ դեպքում ավելի լավ է /dev/առ 🙂 Накрая структурата на тази част от кода изглеждаше така
$pid = pcntl_fork();
if ($pid == -1) {
die('could not fork');
}else if ($pid) {
// we are the parent
echo "I'm parent  \n";
pcntl_wait($status); //Protect against Zombie children
} else {
// we are the child
echo "I'm a child $timer  \n";
exec("$command > /dev/null &");
exit (0);
}

Primercheto կրկին չնչին. Են կատարման, ես շատ впечетлен հետ interspersed միջեւ վերացման գործընթացը, ինչպես կազմել է մոտ 50 մոնիտորինգի process-a ով странба արել 7800+ mysql ներդիրների մոտ 30-40 վրկ. Իսկ մեքենան շատ փխրուն է, քանի որ մենք թեստային върър նախքան բարձրացնել ծրագիրը իրական.

  • Mysql querys – ես շոկի մեջ մեկ մեծ հիմարություն է. Կար մի կոդ, որը կազմել է 4-5 ավելորդ որոնումները տվյալների բազայի, փոխարեն օգտագործել ավելի յուղոտ sql query, ապա հիմնական աշխատանքները, որ տանել php-նա. Դրամ էր նման, ավելի լավ է- напред се правеше една заявка която взимаше информация после изхода от заявката се използваше да се направят други заявки като тя служеше за аргументи. Доста грозна и тлъста ситуация. Subquery а е непозната територия явно както и left join или просто не са били обмисляни нещата добре. Хванах пренаписах заявката всичко се получи доста добре и като цяло натоварването падна с около 200% за същата част от кода.

В общи линии това са нещата на последък с които се заниамваме и немога да кажа че е скучно но понякога се изумявам от разни необмисляни парчета код които трябва да поправям а най стеращното е че често са мои 😆

Ընդլայնված by Zemanta

2 comments

  1. И аз имам тегления на данни, сложени в crontab-a. Пробвах преди със & в края, но ставаше пиково натоварване, грозна история. Сега съм ги оставил, като свърши единия процес, да пуска другия, но това е ужасТ :> Като зацикли някъде и всичко отива по дяволитетова го решавам като килвам старите процеси, като дойде време да се пуска новия, но това е още по-голям ужасТ, защото губя данни. Та ще се се опитам да имплементирам, твоето решене по този въпрос. Благодарско! 🙂

    1. Ами по моя метод хубавото е че информацията може да се обработва от няколко процеса едновременно но това също ти гарантира по голямо натоварване 😉 Баланса между натоварване и скорост винаги е много тънък. Всичко опира до тестове.

Leave a Reply

Ձեր email address will not be published. Պարտադիր դաշտերը նշված են *

Հակա-սպամ *