چرا فالکون یکی از محبوب ترین فریم ورک های php است؟

زبان برنامه نویسی php یکی از زبان های متن باز سمت سروره که نسخه اولیه اون در سال ۱۹۹۵ منتشر شد. به تازگی تیم php نسخه جدید این زبان یعنی نسخه ۷ رو منتشر کردن ولی هنوز این نسخه در حال تست و بررسیه.
با بروزرسانی و پیشرفت این زبان برنامه نویسی ، فریم ورک های زیادی منسوخ شدن همچنین خیلی از فریم ورک ها از پایه نوشته شدن تا از مزیت های جدید php عقب نمونن. به خاطر همین کامیونیتی یک فریم ورک از خود فریم ورک هم مهم تره. البته فریم ورک های نسبتا زیادی کامیونیتی فعال دارن و هر سال شاهد یک لیست بلند بالا از محبوب ترین فریم ورک های php هستیم که با معیار های مختلفی رده بندی شدن.
در این لیست ، فریم ورک فالکون یکی از فریم ورک های رده بالا و مدرنه که به سرعت و request per second بی نظیر ، معروفه. این شهرت به این دلیله که فالکون بر خلاف بقیه فریم ورک های php به صورت یک افزونه C عرضه میشه. C یک زبان برنامه نویسی رده پایینه که سرعت اجرای اون بسیار بالاست. از اونجایی که این فریم ورک بر پایه این زبان نوشته شده ،  سرعت اجرای اون گاهی از خود php هم بالاتر ارزیابی میشه. همچنین این فریم ورک میتونه به نسبت رقبا تعداد ریکوئست بیشتری رو هندل کنه.
البته سرعت زیاد فقط یکی از مزایای این فریم ورکه و این فریم ورک حرف های بیشتری برای گفتن هم داره که در ادامه به چند تا از اون ها اشاره میکنم …

چه چیزی فالکون رو تا این حد محبوب کرده؟

سرعت بالا و اجرای بهینه

بیزینس های آنلاین وقتی برای گسترش کسب و کارشون از کمپین های تبلیغاتی استفاده میکنن در مدت کمی شاهد تعداد کاربر بسیار زیادی هستند و این تعداد کاربر خیلی از اوقات باعث شده سایت داون بشه و نتونه به این حجم از کاربر سرویس بده. اما فالکون با زبان C نوشته شده و در قیاس با بقیه فریم ورک های php میتونه تعداد بازدید بسیار بیشتری رو هندل کنه. در نمودار زیر مقایسه زمان و تعداد ریکوئست رسم شده. در این نمودار میبینید که چقدر فالکون از جایگاه خوبی برخورداره:

مقایسه فریم ورک ها
مقایسه فریم ورک ها

استفاده از معماری MVC

مانند بقیه فریم ورک های مدرن ، فالکون از معماری model – view – controller استفاده میکنه و این باعث میشه که برنامه نویس ها راحت تر و با سرعت بیشتری بتونن برنامه های پیچیده و بزرگ طراحی کنن.

همچنین این فریم ورک از امکان single module و multi module بهره میبره که با اون میتونید لایه های برنامه نویسی و دسترسی رو جدا کنید.

حداقل استفاده از منابع

به نسبت رقبا ، فالکون با افزاش تعداد درخواست ، منابع کمتری از سرور مصرف میکنه. این به این دلیله که همزمان با اجرای php ، فالکون هم اجرا میشه و برنامه بدون هیج وقفه ای از کلاس ها و توابعی که با C در فالکون نوشته شدن ،استفاده میکنه.

همچنین فالکون کامپایل میشه و مثل php یک زبان تفسیر شدنی نیست. با این وجود تا وقتی که تغییری در کد ها به وجود نیاد ، نیازی به کامپایل دوباره نداره. این ، سرعت اجرا رو به شدت بالا میبره. با فالکون شما مزیت های یک زبان برنامه نویسی رده پایین رو با معماری MVC و تحت وب تجربه می کنید.

استفاده از ORM

معمولا اپلیکشن های وب نیازمند Model های مختلفی اند. اطلاعات بعضی از این Model ها ثابت و بعضی شون گاهی تغییر میکنه.

دسترسی به دیتابیس و خواندن و نوشتن در اون یکی از تاثیر گذار ترین پارامتر ها در سرعت اجرای یک اپلیکیشن وبه. فالکون با استفاده از ORM دسترسی به خواندن و نوشتن رو خیلی آسون تر کرده و برای تراکنش در دیتابیس هیچ نیازی به دستورات SQL ندارید و خیلی راحت تر می تونید با دیتابیستون کار کنید.

زبان پرسجو فالکون یا PHQL

زبان پرسجو فالکون یا PHQL یک زبان استاندارد شده شبیه به SQL هست که با زبان C نوشته شده. این زبان بسیار بهینه ست و کمترین میزان منابع رو مصرف میکنه. در این زبان از تکنولوژیی که باعث بهینه بودن SQLite هست استفاده شده. همچنین این زبان چند ویژگی مهم داره که ارتباط و تراکنش دیتابیس رو بسیار امن تر میکنه.

تمپلیت انجین Volt

تمپلیت انجین Volt تمپلیت انجین پیشفرض در فالکونه. این تمپلیت انجین از Jinja الهام گرفته شده و قدرت و سرعت اجرای بالایی داره. البته Volt با C نوشته شده و راز سرعت بالای اون همینه. شما میتونید Volt رو تمپلیت انجین قسمت view فالکون تون قرار بدید  از اون استفاده کنید.

نتیجه:

اگرچه فالکون یک فریم ورک تازه وارده و تازه نسخه ۲٫۰٫۹ اون منتشر شده ولی میتونه با فریم ورک های کهنه کار و قدرتمندی مثل لاراول رقابت کنه.

همچنین کسانی که برای سایتشون نیاز به اپلیکیشن موبایل دارن این فریم ورک بهترین گزینه ست. چون سرعت پاسخ گویی و تعداد پاسخ در ثانیه از مهم ترین معیار های رابطه اپلیکشن موبایل و اپلیکشن وب هستند.

من از تجربه کار کردن با فالکون لذت میبرم و آینده خیلی خوبی رو برای این فریم ورک میبینم. اگر در رابطه با استفاده از این فریم ورک سوالی داشتید و یا میخاید برای سایتتون از این فریم ورک استفاده کنید میتونید رو کمک من حساب کنید و با من تماس بگیرید.

نوشته چرا فالکون یکی از محبوب ترین فریم ورک های php است؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

مشاهده میزان مصرف منابع سرور توسط پلاگین Resource Monitor

معرفی پلاگین   Resource Monitor برای cPanel/WHM

Resource Monitor  به مدیران سرور کمک می کند تا به سرعت یوزر هایی که بالاترین مقدار استفاده از منابع سرور (ram,cpu,mysql) دارند را شناسائی کنید و بصورت کاملا گرافیکی این موارد را نمایش می دهد.

این پلاگین در صورت داشتن لایسنس cpanel بصورت رایگان قابل فعالسازی می باشد.

پیشنیازهای نصب Resource Monitor:

قبل از نصب، لازم است اطمینان حاصل فرمایید که موارد زیر در سرور شما فعال می باشند:

cURL

IonCube Loader

PHP 5.3 یا یالاتر

cPanel 11.34 یا بالاتر

 

مراحل نصب  Resource Monitor  

آخرین نسخه فایل نصبی را از لینک زیر در سرور دانلود نمائید:

https://helpdesk.buycpanel.com/index.php?/Knowledgebase/Article/View/30/0/resource-monitor-for-cpanel

فایل را از حالت فشرده خارج نمائید:

tar xvfz rsmonitor_XXXX.tar.gz

وارد مسیر زیر شوید:

cd rsmonitor

سپس جهت نصب پلاگین دستور زیر را اجرا نمائید:

./install.sh

در زمان نصب،  license key دریافتی از BuycPanel.com  را جهت فعالسازی پلاگین وارد نمائید.

پس از زمان کوتاهی نصب کامل می شود.

نکته: حداقل ۴۸ ساعت صبر کنید تا گزارشات مربوط به استفاده از cPanel / WHM را مشاهده کنید. RSMonitor به طور خودکار به CRON سرور شما اضافه می شود.

جهت دسترسی به پلاگین در قسمت search مربوط به whm مقدار Resource Monitor  را وارد نمائید و یا از صفحه web home گزینه plugins را انتخاب کنید.

 

فعال کردن Resource Monitor برای یوزرها

پس از ورود به پلاگین مطابق آموزش فوق tab مربوط به settings را انتخاب کنید.

از قسمت cPanel Users اکانت های مورد نظر را انتخاب و به لیست Enabled Users اضافه کنید.

گزارش مصرف منابع سایت

نحوه حذف یا Uninstall کردن  Resource Monitor

کافیست در مرحله ۳ از بخش قبل، به جای اجرای فایل install.sh، فرمان زیر را اجرا نمایید:

sh ./uninstall.sh

 

برگرفته از [buycpanel.com]

نوشته مشاهده میزان مصرف منابع سرور توسط پلاگین Resource Monitor اولین بار در ایران سرور پدیدار شد.

گردآوری توسط ایده طلایی

میشه (a==1 && a==2 && a==3) که true بشه آیا؟

اولین بار که این سوال رو دیدم خیلی برام تعجب برانگیز بود.مگه میشه که یک متغیر همزمان هم ۱ باشه هم ۲ هم۳؟مگه میشه ؟ مگه داریم؟ از اونجایی که آدم باهوشی نیستم فوری راه حل رو نگاه کردم. راه حل ساده است.کافیه متدهای toString یا valueOf رو بازنویسی کنیم به این صورت.

const a = {
  i: 1,
  toString: function () { 
    return a.i++;
  }
}
if(a == 1 && a == 2 && a == 3) {
  console.log('Hello World!');
}

 

به همین سادگی. میتونید امتحان کنید.

نوشته میشه (a==1 && a==2 && a==3) که true بشه آیا؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

سوتی یک کدنویس

کد

داشتم وبگردی میکردم .یک دفعه با یک پامپ آپ شوت شدم توی یک وبلاگ میهن بلاگی . کمی صبر کردم (من همیشه پامپ آپ هارو می بندم ولی این دفعه گفتم بزار بمونه) . بعد یک دفعه چشمم افتاد به یک باکس که نوشته بود : « کد زیارت آل یاسین » کدو توی نوت پد ++ کپی کردم و چشمم افتاد به یک سوتی که خیلی خفن بود. اول کدو میزارم و بعد سوتی رو توضیح میدم.

کد :

<script src="file:///C|/Users/313teme/AppData/Roaming/Adobe/Dreamweaver CS6/en_US/Configuration/Temp/Assets/eamF806.tmp/Scripts/swfobject_modified.js" type="text/javascript"></script>
<object id="FlashID" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="120" height="150">
<param name="movie" value="http://file.mihanblog.com//public/user_data/user_files/410/1229710/313.swf" />
 <param name="quality" value="high" />
 <param name="wmode" value="opaque" />
  <param name="swfversion" value="6.0.65.0" />
  <param name="expressinstall" value="Scripts/expressInstall.swf" />
<!--[if !IE]>--><object type="application/x-shockwave-flash" data="http://file.mihanblog.com//public/user_data/user_files/410/1229710/313.swf" width="120" height="150"><!--<![endif]-->
  <div>
  <h4>Content on this page requires a newer version of Adobe Flash Player.</h4>
  <p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>
  <!--[if !IE]>-->
  </object>
  <!--<![endif]-->
  </object>
  <script type="text/javascript">swfobject.registerObject("FlashID");</script>

 

و میتونید سوتی رو در خط اول مشاهده کنید 🙂

همون طور که میدونید (یا نمیدونید) ما برای فراخوانی یک فایل جاوا اسکریپت ابتدا آن را در یک فضای وب آپلود کرده (یا درصورتی که کار ما در هاست باشد در هاست آپلود کرده) و پس از آن با استفاده از کد زیر آن را در بخش هد صفحه قرار میدهیم.

<script src="آدرس" type="text/javascript"></script>

 

ولی در اینجا آدرس کامپیوتر داده شده است ! و کدنویس انتظار دارد که این فایل دانلود شود !

و سوتی های دیگری نیز وجود دارند ! مثلا تگ ها به درستی قرار نگرفته اند !

امیدوارم دیگه از این سوتی ها نبینم.

نوشته سوتی یک کدنویس اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

AMP چیست و چرا باید از آن استفاده کنیم ؟

در این مقاله قصد داریم شما را  با مفهوم AMP  آشنا کنیم. اگر تابحال در تلفن خود جستجوی گوگل  انجام داده باشید،حتما علامت های کنار برخی نتایج را دیده اید. می خواهیم شما را با این علامت ها و لزوم استفاده از آن در وب سایت خود آشنا کنیم.

AMP  برگرفته از  Accelerated Mobile Pages و یک برنامه متن باز گوگل است که با هدف ایجاد اینترنت سریع و راحت تر برای موبایل تولید شده است. در واقع AMP راه حلیست که گوگل برای مقالات سریع فیسبوک  ارائه کرده، بدین معنی که پلتفرمی در اختیار شرکت های رسانه ای می گذارد تا به کاربران خود امکان خواندن سریع مقالات بدون نیاز به خارج شدن از فیسبوک را بدهند.

با استفاده از AMP ، بلافاصله نتایج جستجو به کاربران نمایش داده می شود. به دلیل اینکه بخش قابل توجهی از محتوای اصلی هر صفحه کنار گذاشته می شود و صفحه برای نمایش در موبایل بهینه می گردد.

با وجود اینکه روی آوردن کاربران به استفاده ازAMP در ابتدا پاسخی به حرکت رقبایشان بود تا سرعت بهتری به سایت بدهند و از حریفان خود عقب نیفتند  اما ما را متوجه نکته مهم دیگری هم می کند و آن تغییر جهان در نوع استفاده از اینترنت است. سال گذشته، برای اولین بار در تاریخ ، درصد بیشتر استفاده از اینترنت از طریق مرورگرهای کامپیوتر انجام نشده. هم اکنون طبق آمار StatCounter، ۵۱٫۳ درصد از کل ترافیک وب از مرورگرهای تلفن همراه می آید. جالب است بدانید که با زیاد شدن تعداد تلفن تبلت های هوشمند این رقم در حال افزایش است.

امروز مثل بیشتر مردم جهان مشتریان شما هم به جای کامپیوتر با استفاده از موبایل خود آنلاین می شوند و این شما هستید که باید وب سایت خود از طریق موبایل به آنها عرضه کنید.

اگر موقع طراحی وب سایت فکری برای این موضوع نکردید اکنون باید به فکر بهینه سازی آن برای نمایش در صفحات موبایل باشید. حتما در مسیر بهینه سازی وب سایت خود AMP را در نظر بگیرید.

چرا باید از AMP استفاده کنید؟ چون سرعت لود وبسایت شما را بسیار زیاد می کند.

حدس بزنید یک کاربر مویایل تقریبا چقدر برای لود شدن یک صفحه صبر می کند؟ ۱٫٫۲٫٫۳٫٫ فقط سه ثانیه.

به گفته معاون جستجوی گوگل، David Besbris ، اگر کاربر فقط سه ثانیه منتظر لود شدن صفحه بماند، ۵۳ درصد از جستجوهایی که از طریق موبایل انجام میگیرد، نا تمام رها می شوند.

یعنی در همین زمانی که این جمله را میخوانید تعدادی کاربر از سایت شما خارج می شوند. طبق گفته Beris که پروژه AMP را مدیریت می کند، AMP زمان لود صفحات را یک ششم می کند. (سرعت شش برابر سریعتر می شود).

ظرف دو سالی که شروع به انجام این پروژه کردیم تعداد سایت های استفاده کننده از AMP به بیش از ۲۵ میلیون رسیده است که این سایت ها بالغ بر ۴میلیارد صفحه AMP منتشر کرده اند. و نه تنها شمار این صفحات در حال افزایش است بلکه سرعت آنها هم روز به روز بیشتر می شود. جالب است بدانید زمان میانگین لود شدن یک صفحه AMP از سرچ گوگل کمتر از نیم ثانیه است.

Washington Post یکی از شرکای اولیه ی AMP اذعان می کند که محتوای  AMP برای خوانندگانش ۸۸ درصد سریعتر از محتوای غیر AMP لود می شود.

AMP مختص دسته خاصی از کاربران نیست و باعث افزایش سرعت برای همه آنها خواهد شد

به نمودار آماری زیر دقت کنید:

این نمودار سهم بازار از موتور های جستجو را نشان می دهد. خط آبی گوگل است. پس به وضوح اهمیت گوگل در موفقیت سایت خود  را در این نمودار می بینید.

هدف اصلی گوگل تضمین کارکرد AMP بدون وابستگی به نوع موبایل یا نوع سیستم عامل است. همچنین نمی خواهد AMP فقط برای صفحات  ساده موبایل مفید باشد بلکه محتواهای سنگین بخش زیادی از آن را تشکیل می دهد.

گوگل هنگام راه اندازی این پروژه در وبلاگ خود اینطور عنوان کرد که: ” ما می خواهیم صفحات وبی که دارای محتوای سنگین مثل ویدئو، انیمیشن و عکس هستند هم در کنار تبلیغات هوشمند گوگل بلافاصله لود شوند. ”

“همچنین قصد داریم کدی بنویسیم که در چندین پلتفرم و دستگاه مختلف کار کند، بنابراین محتوا در همه جا بلافاصله نمایش داده خواهد شد، بدون وابستگی به اینکه چه مدل تلفن ، تبلت یا موبایلی استفاده می کنید. “

همه آنچه گفتیم نشانگر اینست که AMP یک تجربه خوب برای هر کاربریست. چون نه تنها سرعت لود صفحه را بالا می برد بلکه صفحات سایت را طوری تنظیم می کند که در تمام دستگاه ها به خوبی نمایش داده شود.

تاثیرات AMP

وقتی AMP شروع به کار کرد، Richard Gingras، سرپرست ارشد محصولات اجتماعی و خبری گوگل  به AdAge اعلام کرد، AMP در رتبه بندی جستجوی موبایل عامل موثری نخواهد بود.

AMP تاثیر زیادی در رتبه بندی جستجو نخواهد داشت، چون عوامل دیگر ( رتبه بندی موتور جستجو) هم باید در کنار آن بهتر شوند.”

اما از طرفی Gingras به این نکته اشاره کرد که AMP   در سرعت تاثیرگذار خواهد بود.

“اگر دو مقاله داشته باشیم که یکی از این مقالات به تمام خصوصیات AMP به جز سرعت امتیاز دهد و مقاله دوم تنها به سرعت بپردازد، ما روی دومین مقاله تاکید خواهیم کرد چون سرعت فاکتوریست که برای کاربران بسیار پر اهمیت است”.

 

جالب است بدانید گوگل در سال ۲۰۱۵ آپدیتی برای الگوریتم خود به نام ” Mobilegeddon” منتشر کرد، که باعث شد موبایل فرندلی بودن(mobile friendly )یک صفحه اهمیت پیدا کند چون اگر صفحات سایت موبایل فرندلی طراحی شوند در رتبه بندی آنها در جستجو تاثیر خواهد داشت.

یکی از اهداف مهم گوگل که روی آن بسیار کار کرده، ساده بودن فعالسازی AMP است ،به همین منظور کد را از نوع باز یا open-source نوشته و آموزش هایی هم برای انجام این بهینه سازی فراهم کرده است.

نتیجه اینکه: صفحاتی که در آنها AMP فعال باشد در سرچ های گوگل در موبایل رتبه بالاتری قرار می گیرند.

کاربران  به سایت شما می آیند، می مانند و پول خرج می کنند

برطبق مقاله ای که به زودی توسط گوگل منتشر می شود، AMP از راه های زیادی می تواند به ما کمک کند.

“مطالعات نشان می دهد، AMP باعث افزایش ۱۰ درصدیه ترافیک سایت می شود همچنین مراجعین ۲ برابر قبل روی صفحات سایت وقت می گذارند. در مورد سایت های تجاری،صفحات AMP افزایش ۲۰ درصدی فروش، نسبت به صفحات غیر AMP داشتند. ”

نتیجه اینکه کاربران بیشتر به سایت های AMP مراجعه می کنند، وقت بیشتری در این سایت ها صرف می کنند و با احتمال بیشتری از آنها خرید می کنند.

 

AMP  بی نقص نیست

AMP برای همه قانع کننده نبوده، بلکه این ایده گوگل مخالفانی هم دارد، مثلا Scott Gilbertson اعتقاد دارد، کوچک کردن تگ های مورد قبول HTML ، باعث بی مفهوم و خنده دار شدن سایتهای اینترنتی می شود، او می گوید:

AMP واقعا چیست، راهی برای سوء استفاده گوگل از وب سایت شما! این کار محتوای سایت شما را از بین می برد و تمام آثار باقیمانده از اعتبار شخصی را از سایت حذف می کند”

یا مثلا ergey Grybniak  از Search Engine Journal  می گوید: AMP می تواند در آمد حاصل از آگهی را تحت تاثیر قرار داده و دسترسی تحلیلی را از بین ببرد”.

برخی در صنعت SEO اعتقاد دارند، با تکیه بر کش گوگل، AMP ترافیک سایت ها را رد می کند.

باید از AMP استفاده کنم؟

این سوال کلیدی است. اگر صاحب یک سایت یا وبلاگ یا  یک بخش خبری هستید، استفاده از AMP تاثیر چندانی نخواهد داشت. AMP به شما اجازه می دهد تا اطلاعات خود را به سرعت منتقل کنید و آنها را در اخبار گوگل نمایش می دهد.

باوجود اینکه اطلاعات مبنی بر استفاده سایت های تجاری از AMP  و موفقیت آنها کم بوده ، گوگل اینطور گزارش می کند که این پروژه فوائد تجاری هم داشته است.

در نتیجه ، پاسخ  ما به این سوال کلیدی این است که حداقل بخشی از سایت خود را با AMP آزمایش کنید، به خصوص بخشی که در آن رقبای شما از این فن آوری استفاده می کنند.

 

برگرفته از [digitalmarketinginstitute.com]

نوشته AMP چیست و چرا باید از آن استفاده کنیم ؟ اولین بار در ایران سرور پدیدار شد.

گردآوری توسط ایده طلایی

زبان برنامه نویسی Dart

dart

سلام امروز هم سراغ زبان برنامه نویسی جدیدی رفتم دارت یا Dart .

در ابتدای ورود خودش رو جایگزینی برای جاوا اسکریپت معرفی کرده .

در حال حاظر به نسخه ۲ به روز شده. توسط گوگل توسعه داده میشه .

وب, اندروید, آی او اس رو پشتیبانی میکنه . آی دی ای های زیر هم پشتیبانیش میکنن :

Visual Studio Code, Intellij IDE, Android Studio, … .

این زبان شی گرا, برپایه کلاس و سینتکسی مشابه c داره .

در ابتدای ورود قرار بوده پیچیدگی هایی داشته باشه تا بتونه قدرت نمایی کنه و انتقاد های زیادی بهش شده که در نسخه ۲ بهبود دادنش .

رقبا : Typescript – Javascript .

در سایت های ایرانی کتاب و آموزش های ویدیویی این زبان یافت میشه . هم چنین در سایت اصلی به این موضوع پرداخته شده :

www.dartlang.org

www.dartlang.org/guides/language/language-tour

برای من نصب ابزار هاش زجر آور بود .

( راستی من با نصب اندروید استودیو ۳٫۱٫۲ مشکل دارم sdk manager رو ازش جدا کردن sdk tools لینک دانلود گذاشتن و یا مشابه این و از همینجا تشکر میکنم از کسی که آموزشش رو قرار بده حتما لایکش میکنم 🙂 ).

شاد و پیروز باشید که البته خیلی سخته :).

نوشته زبان برنامه نویسی Dart اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

کاهش مصرف رم سایت با استفاده از yield در PHP

آیا در مورد yield در PHP چیزی شنیدید؟ خب من در وقتتون صرفه جویی میکنم و نیازی نیست برید سرچ کنید با سرفصل زیر در مورد yield صحبت می کنیم

  1. معرفی yield.
  2. تفاوت بین yield & return.
  3. خصوصیات yield.
  4. نتیجه گیری.

معرفی yield

بزارید یه تابع تعریف کنیم مثل بقیه توابع ولی به جای return کردن yield میکنیم مانند:

function getValues() {
    yield 'value';
}

// print the string "value"
echo getValues();

 

خب مسلماَ، این کد کار نمی کنه به شما یه fetal error بر میگردونه:

object of class Generator could not be converted to string

بزارید ارور رو توضیح بدیم:

تفاوت بین yield & return

اروری که بالا نوشتم میگه تابعمون string باید return میکرده ولی یه object فرستاده!!! اگه بخوایم تایپ شون رو بفهمیم:

function getValues() {
    return 'value';
}
var_dump(getValues()); // string(5) "value"

function getValues() {
    yield 'value';
}
var_dump(getValues()); // class Generator#1 (0)

کلاس Generator یه کلاسی هست که implement میشه از اینترفیس Iterator: یعنی باید از تابع getValues در حلقه ها استفاده کنیم:

foreach (getValues() as $value) {
    echo $value;
}
// using variable is also alright
$values = getValues();
foreach ($values as $value) {
    echo $value;
}

البته این تنها تفاوتش نیست

یه Generator بهت اجازه میده از حلقه ها برای یه دسته از داده ها استفاده کنی بدون اینکه آرایه ای تعریف کنی و این یعنی آرایه ای نیست که در رم ذخیره کنه و در نتیجه مصرف رم کمتر!

برای درک بهتر استفاده از yield فکر کنید یه آرایه داریم با ۸۰۰,۰۰۰ ایندکس و بخوایم با تابعی مثل تابع بالا return کنیم و اگر با تابع memory_get_usage() میزان رم را اندازه گیری کنیم، من در هر ۲۰۰,۰۰۰ المنت اندازه گیری کردم و نتیجه اش:

۰٫۳۴MB
۸٫۳۵MB
۱۶٫۳۵MB
۳۲٫۳۰MB

خب بخاطر چند تا خط کد، اسکریپتمون بخواد ۳۰ مگ حافظه مموری رو اشغال کنه یعنی هر بار صدا کردن آرایه این مقدار در مموری افزایش پیدا میکنه اما اگه از yield برای همین مثال استفاده کنیم

نتیجه:

۰٫۳۴MB
۰٫۳۴MB
۰٫۳۴MB
۰٫۳۴MB

متوجه تفاوت فاحش این دو کد میشید اما این به این معنی نیست که از return به yield مهاجرت کنیم اما اگه از یه آرایه سنگین در کدتون استفاده می کنید گزینه مناسب همین yield خواهد بود

خصوصیات yield

من یه چندتا از خصوصیات yield رو اینجا براتون میگم(مهماش!)

آ. می تونید yield و return رو باهم استفاده کنید:

function getValues() {
    yield 'value';
    return 'return value';
}
$values = getValues();
foreach($values as $value) {}
echo $values->getReturn();// 'retrun value'

ب. برگرداندن به حالت key/value

function getValues() {
    yield 'key' => 'value';
}
$values = getValues();
foreach($values as $key => $value) {}

اطلاعات بیشتر در اینجا

نتیجه گیری

هدف این مقاله بیان تفاوت بین yield و retrun بود و زدن چند تا مثال برای درک بهتر yield

امیدوارم بدردتون خورده باشه

(ترکیبی از ترجمه یه مقاله و خودم)

لطفا در مورد اولین مطلب نظراتتون رو بدید و اگر عنوان یا مبحثی مد نظرتون پیشنهاد دهید

یا حق

نوشته کاهش مصرف رم سایت با استفاده از yield در PHP اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

امضای کامیت‌های گیت با استفاده از کلید GPG

این یادداشت یک راهنما برای استفاده از GPG برای امضا کردن کامیت‌های گیت است، اگر دنبال یک راهنمای نسبتا مفصل برای GPG هستید، خواندن این مطلب را توصیه می‌کنم: GPG یک راهنمای نسبتا مفصل

برای شروع اجازه بدید پاراگراف اول از منبعی که در شروع یادداشت معرفی کردم رو کپی کنم:

GPG یا PGP چی هست اصلا؟

این یک الگوریتم رمز گذاری شخصی حساب میشه. در حقیقت PGP اون الگوریتمه، و من از برنامه آزاد GPG برای مدیریتش استفاده میکنم. درسته که بگم این این کلید PGP منه، ولی حقیقت اینه که ناخواسته خیلی وقتا متوجه میشم که گفتم این کلید GPG منه، عمدی نیست ولی از لحاظ تکنیکی اگه اهل خورده گرفتن باشی غلط میتونه باشه.

ساختن کلید شخصی

۱. اگر gpg روی سیستمتون نصب نیست، باید دریافت و نصبش کنیم. برای تست دستور زیر رو اجرا میکنیم

gpg --version

 

اگر خروجی معتبری داشت که خیلی هم خوب، یعنی نیازی به نصب نداریم، اگر هم نه که از این آدرس دریافت و نصبش می‌کنیم.

۲. با استفاده از دستور زیر یک کلید خصوصی/عمومی می‌سازیم

gpg --full-gen-key

اجرای این دستور مجموعه‌ای از سوالات رو به مانشون میده که با جواب دادن بهشون کلیدمون رو می‌سازیم. اگر سوال‌ها رو بدون جواب دادن و تنها با زدن کلید اینتر رد کنیم جواب پیش‌فرض برای هر سوال انتخاب میشه.

۳. اولین سوال این است که از کدام الگوریتم می‌خواهید استفاده کنید. شماره ۱ رو انتخاب می‌کنیم.

Please select what kind of key you want:
   (۱) RSA and RSA (default)
   (۲) DSA and Elgamal
   (۳) DSA (sign only)
   (۴) RSA (sign only)
Your selection? 1

۴. سوال بعد در مورد طول رشته‌ی کلید است، هرچه کلید طولانی‌تر، امن‌تر 🙂 مقدار ۴۰۹۶ رو به عنوان طول رشته انتخاب می‌کنیم.

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
Requested keysize is 4096 bits

۵. سوال بعدی که پرسیده می‌شود، مدت زمان اعتبار کلید است، که ما گزینه‌ی اعتبار همیشگی یا «بدون تاریخ انقضا» رو انتخاب می‌کنیم. جواب گزینه‌ی ۰ است.

Please specify how long the key should be valid.
         ۰ = key does not expire
        = key expires in n days
      w = key expires in n weeks
      m = key expires in n months
      y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all

۶. جواب‌ها رو تایید می‌کنیم.

Is this correct? (y/N) y

۷. نامی که برای امضای کلیدها قرار است استفاده شود و آدرس ایمیل‌ را وارد می‌کنیم. از آنجا که می‌خواهیم با کمک این کلید کامیت‌های گیت را امضا کنیم، بهتر است با نام و آدرس ایمیلی که به تنظیمات گیت داده‌ شده یکی باشد. سوال آخر را هم با وارد کردن گزینه‌ی O و تایید مشخصات جواب می‌دهیم.

GnuPG needs to construct a user ID to identify your key.

Real name: kiavash
Email address: me@kiavash.one
Comment:
You selected this USER-ID:
    "kiavash <me@kiavash.one>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O

۸. یک پسورد خوب و قوی به کلید می‌دهیم.

۹. با کمک دستور زیر کلید‌هایی که ساخته شده را می‌توان دید.

gpg --list-secret-keys

دادن کلید به گیت

۱. با استفاده از دستور زیر مشخصات کاملی از کلید‌هایی که ساخته‌ایم را می‌توانیم ببینیم:

gpg --list-secret-keys --keyid-format LONG me@kiavash.one

نیاز به توضیح نیست که باید از آدرس ایمیلی که برای ساختن کلید خودتان استفاده کرده‌اید استفاده کنید.

۲. کلیدی که با sec شروع شده است را پیدا کنید و GPG key ID آن‌را کپی کنید. در این مثال مقدار آن برابر با ۳۰F2B65B9246B6CA است:

sec   rsa4096/30F2B65B9246B6CA 2017-08-18 [SC]
      D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA
uid                   [ultimate] kiavash <me@kiavash.one>
ssb   rsa4096/B7ABC0813E4028C0 2017-08-18 [E]

۳. برای گیت مشخص کنید که کامیت‌ها را با کمک این کلید امضا کند

git config --global user.signingkey 30F2B65B9246B6CA

(مقدار ID که از مرحله قبل به دست آوردید را جایگزین مقدار پیش‌فرض در این مثال ۳۰F2B65B9246B6CA باید بکنید)

امضای کامیت‌ها

بعد از ساختن کلید GPG و دادن مقدار آن به گیت می‌توانید شروع به امضا کردن کامیت‌هایتان بکنید. چند راه برای این‌کار داریم

۱. راه ول استفاده از سوییچ -S برای امضا کردن هر کامیت است

git commit -S -m "My commit msg"

۲. اگر نمی‌خواهیم بعد از هر بار کامیت کردن از سوییچ S استفاده کنیم، می‌توان برای گیت مشخص کرد که بعد از هر بار کامیت کردن آن‌ها را اتوماتیک امضا کند

git config --global commit.gpgsign true

۳. در هر دو حالت بعد از هر بار کامیت کردن باید پسورد کلید را وارد کنیم، البته امروزه اکثر سیستم‌عامل‌ها برنامه‌های پیش‌فرضی به همراه دارند که میتوانند این پسورد را در خود ذخیره کنند و نیاز به تایپ پسورد در هر سری را از بین ببرند. اگر مطمین هستید که کسی جز شما از کامپیوترتان استفاده نمی‌کند می‌توانید پسورد را ذخیره کنید. من این کار را نمی‌کنم

معرفی کلید به سرویس‌هایی مثل گیت‌هاب یا گیت‌لب

۱. از کلید عمومی با کمک دستور زیر می‌توان خروجی گرفت(ID خودتان را جایگزین مقدار پیش‌فرض این مثال باید بکنید)

gpg --armor --export 30F2B65B9246B6CA

۲. مقدار خروجی را کپی کنید. خروجی شبیه به این خواهد بود:

-----BEGIN PGP PUBLIC KEY BLOCK-----
blahblahblah
blahblahblah
...
...
...
-----END PGP PUBLIC KEY BLOCK-----

۳. به قسمت تنظیمات اکانت در سرویس مورد نظر می‌رویم، در گیت‌هاب به قسمت SSH and GPG keys یا در گیت‌لب GPG keys می‌رویم و مقدار کلید عمومی را در آن کپی می‌کنیم.

کامیت‌های تایید شده

۱. به زبانه‌ی commits هر مخزن در سرویس مورد نظر که برویم، به راحتی می‌توان کامیت‌های امضا شده‌ی معتبر، نامعتبر و کلا امضا نشده‌ها را از هم تشخیص داد.

۲. با کلیک بر روی نشان امضای هر کلید می‌توان مشخصات آن‌را دید


پانویس

آدرس این یادداشت بر روی وبلاگ شخصی کیاوش

https://kiavash.one/2018/05/23/use-gpg-for-sign-commits/

در صورتیکه بخواهید به هر شکلی در نوشتن این یادداشت مشارکت کنید، مثلا آن را اصلاح کنید یا مطلبی به آن اضافه کنید، منبع این یادداشت روی گیت‌هاب در این آدرس در دسترس است:
https://github.com/kiamazi/kiavash.one/blob/master/content/blog/2018-5-23-use-gpg-for-sign-commits.md
میتوانید آن‌را ویرایش کنید. البته باید یادآوری کنم که هر ویرایشی قبل از اتشار نیاز به تایید دارد.

منبع ۳عکس آخر و مقادیر پیش‌فرض مثال‌ها:

https://gitlab.com/help/user/project/repository/gpg_signed_commits/index.md

نوشته امضای کامیت‌های گیت با استفاده از کلید GPG اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

مروری بر MySQL Triggers

این متن یا مقاله مختص کسانی هستش که دانش حداقلی کار بار مای‌اس‌کیوال دارند.

یکی از انگیزه های نوشتن این خُردمقاله متاسفانه و در کمال تعجب دیدن چندین نفر از برنامه نویسای قدیمی تر از خودم که در حد ORM از بانک اطلاعاتی استفاده میکردند و حد استفادشون از دیتابیست CRUD بود یعنی Select,Insert,Delete,Update و دیتابیس SQL رو مسئول نگهداری داده میدونستن که به صورت ماتریسی داده ها رو نگه میدارن با یه سری روابط بین جداول!

Trigger:

تریگرها به مجموعه‌ای از توابع/دستوراتی اطلاق میشه که با انجام کاری اجرا میشوند ، یعنی اگر تریگری داشته باشیم برای اجرا قبل از Insert در جدول X این تریگر هنگامیکه بخواهیم یک داده رو با کوئری Insert وارد جدولمون کنیم اجرا خواهد شد.

کار با تریگرها ساده ولی کاربردی هستند.


یک مثال کاربردی:

فرض میکنیم برای یک فروشگاه اینترنتی دیتابیسی رو میخواهیم طراحی کنیم که دارای ۲ جدول برای ذخیره‌ی مشتری و اعتبارپنلش و دیگری برای نگهداری اطلاعات هر خرید مشتری باشد.

عملی که رخ میدهد به شرح زیر است:

هنگامیکه مشتری اقدام به خرید نمود مبلغ هر خرید از اعتبار کاربری مشتری کسر شود.

Customers

  • id: شناسه مشتری
  • name:نام مشتری
  • credit:اعتبار مشتری
CREATE TABLE `customers` ( 
	 `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
	`name` VARCHAR(20) NOT NULL , 
	`credit` INT NOT NULL , 
	 PRIMARY KEY (`id`)
);

 

Baskets

  • id:شناسه خرید
  • customer_id:شناسه خریدار/مشتری
  • amount: قیمت سبد خرید
CREATE TABLE `baskets` ( 
	`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
	`customer_id` INT UNSIGNED NOT NULL ,
	`amount` INT UNSIGNED NOT NULL ,
	PRIMARY KEY (`id`)
);

(برای خلاصه سازی از مابقی جزئیات همچون ریلیشن ها فاکتور میگیریم)

حالا یک تریگر مینویسیم که بعد از ثبت هر خرید مبلغ خرید amount را از اعتبار حساب مشتری credit کم کند.

برای تست یک مشتری به صورت زیر تعریف میکنیم:

INSERT INTO `customers` (`id`, `name`, `credit`) VALUES (NULL, 'Mahmoud', '1000000');

اگر از تریگر استفاده نمیکردیم میبایست بعد از درج هر خرید به صورت دستی کوئری زیر را اجرا میکردیم

UPDATE `customers` 
    SET `customers`.`credit`=`customers`.`credit` -  $BasketAmount
    WHERE `customers`.`id` = $CustomerId;

حال این کوئری رو در تریگر After Insert جدول خریدها قرار میدهیم که بعد از اعمال هر خرید خودکار این کار را انجام دهد:

CREATE TRIGGER `MyExampleName` AFTER INSERT ON `baskets`
FOR EACH ROW BEGIN
    UPDATE `customers` 
        SET `customers`.`credit`=`customers`.`credit` - NEW.`amount` 
        WHERE `customers`.`id` = NEW.`customer_id`;
END

دستور بالا تریگری رو تعریف میکنه که بعد از ورود داده در جدول baskets کوئری Update میگیره روی جدول مشتریها و با

`customers`.`credit`=`customers`.`credit` - NEW.`amount`

مبلغ خرید رو از حساب مشتری کم میکنه و برای پیدا کردن مشتری از کاندیشن

 WHERE `customers`.`id` = NEW.`customer_id`;

استفاده میکنیم که مشتری مربوط به خریدمون رو پیدا کنه و کوئری رو روش اجرا کنه.

اگر بخواهیم از دستورات چند خطی و یا چند دستور در تریگر استفاده کنیم نیاز هست که از BEGIN و END برای مشخص کردن ابتدا و انتهای دستورات استفاده کنیم در غیر اینصورت استفاده از اونها برای کوئریهای تک دستوری الزامی نیست.

با NEW.نام ستون میتونیم داخل تریگیر به مقادیر ستونهای اون رکوردی که تریگر داره روش اجرا میشه میتونیم دسترسی پیدا کنیم.

البته در تریگرهای آپدیت هم به NEW و هم به OLD دسترسی داریم که مقادیر قدیم و جدید هر ستون رو بر میگردونن و در تریگر حذف هم فقط به OLD.نام_ستون دسترسی داریم.

به طور کلی

CREATE TRIGGER `نام دلخواه` AFTER INSERT ON `نام جدول`

برای ساخت یک تریگر از اسلوب فوق استفاده میکنیم که برای تعیین زمان/نوع تریگر میتونیم از:

  • AFTER INSERT
  • BEFORE INSERT
  • AFTER UPDATE
  • BEFORE UPDATE
  • AFTER DELETE
  • BEFORE DELETE

که از اسامی آنها مشخص هست برای چه رخدادی تعریف میشوند و واضح هستش نیازی به ترجمه هم نداره!

دستورات شرطی مثل تعریف متغیرهای DECLARE و دستورات شرطی IF THEN/ELSE و حلقه ها و سایر دستورات برنامه نویسی یا کوئری نویسی رو میشه داخل تریگر اجرا کرد.

اگر موقع ثبت کوئری ساخت تریگر دچار مشکل شدید به خاطر این هستش که جدا کننده‌ی زبانSQL پیشفرض سمی‌کالن هستش که با سمیکالن داخل دستورات دچار تداخل میشه که برای جلوگیری از این اتفاق باید Delimiter کوئری رو از حالت پیشفرض به یک چیز دیگه مثلاً $$ تغییر بدید.

مثل:

DELIMITER $$;
Trigger Query 
$$

که سیمکالن با این روش دور میخوره و خطا نمیده.

منتظر فیدبکهاتون هستم.

نوشته مروری بر MySQL Triggers اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

۸ قدم برای حرفه‌ایی شدن در React (قسمت دوم)

در قسمت قبلی درباره ESLint, WebPack و Babel صحبت کردیم و دیدیم که با یه تغییر کوچیک داخل کانفیگ ESLint چقدر میشه تمیز و بهینه تر کد نویسی کرد.
تو این قسمت ویژگی‌های پلاگین transform-class-properties و تکنیک Code Splitting را مورد بررسی قرار می‌دهیم.


گفتیم که Babel ماشین تبدیل کد به حساب میاد

از همین ویژگی میشه برای کمتر کد زدن و صرفه جویی در وقت و هزینه استفاده کرد. چه طوری ؟
اول از همه پلاگین transform-class-properties را نصب می‌کنیم:

npm install babel-plugin-transform-class-properties –save

بعدش در ریشه پروژه یک فایل به نام .babelrc ساخته و پلاگین را در آن فراخوانی می‌کنیم:

از این به بعد برای defaultProps, propTypes, initialize state, و bind کدن لازم نیست سختی بکشیم 🙂

قبل از transform
بعد از transform

اتفاقی که پشت صحنه رخ میده اینکه کد شما در زمان build شدن به حالت اصلی خودش که مطابق عکس اول هستش تبدیل میشه.


تفکیک کد یا Code Splitting چیست ؟

تفکیک کد، تکنیکی برای کمتر کردن حجم برنامه شما و درنتیجه بازگذاری سریع‌تر و افزاریش رضایت مشتری و داشتن SEO بهتری است.

در حالت عادی وقتی برنامه React شما build میشه خروجی شما یک فایل bundle.js هست که داخل اون از تمامی پکیچ‌هایی که استفاده کردید تا کدهای برنامه که خودتون نوشتید قرار داره.

اما مشکل کجاست ؟

  • شما کافیه یکی از پکیج‌هایی که استفاده کردید رو بروز کنید، کاربر مجبوره تمام bundle.js رو دوباره دانلود کنه (فقط برای یک آپدیت ساده یکی ‌از هزاران پکیجی که داخل node_modules قرار داره)
  • کاربر برای دیدن صفحه مقالات علاوه بر کد صفحات خانه، سبد خرید، درباره ما، تماس با ما، فروشگاه، باید پکیج‌های استفاده شده داخل این صفحات رو دریافت کنه در صورتی که اصلا لزومی نداره 🙂

جالبه نه ؟! جالب ترم میشه :))
یادتونه گفتیم WebPack کل برنامه شما رو یک فایل میکنه، اینجاست که ازش می‌خوایم اینکارو نکنه (البته تا حدودی)

اول از همه پکیج‌هایی که لازم داخل کل برنامه وجود داشته باشن (مثل: react و react-dom و react-redux و react router-dom و redux و …) رو از مابقی فایل‌ها جدا می‌کنیم (اصطلاحا Vendor Splitting می‌کنیم)

دوم با استفاده از پکیج‌های مختلفی که وجود داره تفکیک کد رو در سطح کامپوننت یا در سطح مسیر (Route Level) انجام میدیم. (بدون استفاده از پکیج اینکار امکان پذیر هستش ولی خیلی کثیف کاری داره)

پیش نیاز اصلی Webpack 2 و یا نسخه جدیدتر هستش
برای تفکیک کد در سطح Component و Route از پکیج react loadable استفاده کنید.

اما برای Vendor Splitting باید خودمون دست به کار بشیم و webpack رو کانفیگ کنیم. (توجه داشته باشید بسته به نوع setup که استفاده کردید این کانفیگ ممکنه کمی نیاز به تغییر داشته باشه)

اگر از create-react-app استفاده می کنید باید یکبار برنامه را eject کنید و config.webpack را به صورت زیر تغییر دهید

کانفیگ برای webpack 2، در نسخه های مختلف syntax کمی متفاوت است

در آخر حداقل خروجی شما ۳ فایل manifest.js و vendor.js و chunk.[x]:hash.js خواهد بود که

  • فایل vendor:که در آن پکیج‌های اصلی برنامه شما که وجود آنها در تمامی کامپوننت‌ها الزامی است، قرار دارد.
  • فایل manifest.js که وجود این فایل برای Dynamic Load شدن chunk ها الزامی است، در اصل این فایل مشخص می‌کند component X در کدام فایل وجود دارد که مرورگر در زمان مورد نیاز آنرا بارگذاری می‌کند.
  • و chunk ها که کد هر صفحه (خانه، فروشگاه، سبد خرید، و …) را در خود دارد و برنامه شمارا به قسمت های کوچکتر تقسیم می‌کند.


ادامه مطالب رو سعی می کنم تا چند روز آینده در قالب مقاله دیگه‌ایی تکمیل کنم و لینکش رو همینجا قرار بدم
تا اون موقع این چندتا لینک رو مطالعه کنید:

https://medium.com/@paularmstrong/twitter-lite-and-high-performance-react-progressive-web-apps-at-scale-d28a00e780a3

https://medium.com/@adamrackis/vendor-and-code-splitting-in-webpack-2-6376358f1923

http://egorsmirnov.me/2015/06/14/react-and-es6-part2.html

خوشحال میشم بدونم این مقاله مفید واقع شده یا نه! و آیا شما شروع به تغییر دادن کد خودتون می‌کنید؟ و اول از کدوم قسمت شروع می‌کنید 🙂

نوشته ۸ قدم برای حرفه‌ایی شدن در React (قسمت دوم) اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی