رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران

جستجو در تالارهای گفتگو

در حال نمایش نتایج برای برچسب های 'performance'.



تنظیمات بیشتر جستجو

  • جستجو بر اساس برچسب

    برچسب ها را با , از یکدیگر جدا نمایید.
  • جستجو بر اساس نویسنده

نوع محتوا


وبلاگ‌ها

چیزی برای نمایش وجود ندارد

چیزی برای نمایش وجود ندارد

تالارهای گفتگو

  • انجمن‌های آی او استریم
    • اخبار و اعلامیه‌های سایت
    • اسناد و قوانین مرجع
    • رویداد‌ها و جلسات
    • معرفی محصولات نوشته شده‌ بومی
    • مرکز نظرسنجی جامعه‌ی برنامه‌نویسان
    • مقالات و اسناد مشاوره‌ای
  • استارتاپی و کسب‌و‌کار
    • استارتاپ‌ها
    • سرمایه گذاری
    • شتاب دهنده‌ها
    • پارک‌های علم و فناوری و مراکز رشد
    • مصاحبه با استارت‌آپ‌ها
    • قوانین حقوقی
    • داستان‌های موفقیت
    • کارآفرینان و متخصصین
    • مشاوره اجرای کسب‌وکار
    • اخبار حوزه‌ی استارتا‌پی
    • آگهی‌های استخدامی
  • زبان‌های برنامه نویسی
    • برنامه نویسی در C و ‏++C
    • برنامه نویسی با Java
    • برنامه نویسی با JavaScript
    • برنامه نویسی با Go
    • برنامه نویسی با Python
    • برنامه نویسی با Delphi
    • برنامه نویسی با Ruby
    • برنامه نویسی با VB6
  • طراحی و توسعه وب
    • برنامه نویسی در PHP
    • برنامه نویسی در Asp.Net
    • برنامه نویسی با Node.JS
  • طراحی و توسعه وب اپلیکیشن‌ها
    • طراحی و توسعه در Angular
    • طراحی و توسعه در React.JS
    • طراحی و توسعه در Vue.JS
  • طراحی و توسعه موبایل و اِمبِد‌ها و تلوزیون‌ها
    • برنامه نویسی تحت محصولات اپل
    • برنامه نویسی تحت محصولات گوگل
    • طراحی و توسعه تحت محصولات دیگر
  • برنامه‌نویسی سطح پایین و سیستم عامل‌ها
    • سیستم عامل‌های آزاد
    • سیستم عامل‌های تجاری
  • بانک‌های اطلاعاتی
    • پایگاه داده MySQL
    • پایگاه داده PostgreSQL
    • پایگاه داده SQLite
    • پایگاه داده MongoDB
    • پایگاه داده SQL Server
    • دیگر پایگاه‌های داده
  • برنامه نویسی تحت محصولات اپل
    • محیط توسعه Xcode
    • برنامه نویسی با Objective-C
    • برنامه نویسی با Swift
  • برنامه نویسی تحت محصولات مایکروسافت
    • محیط توسعه Visual Studio
    • برنامه نویسی با #C
    • برنامه نویسی با Visual Basic.Net
    • طراحی و توسعه تحت Wpf
    • طراحی و توسعه تحت Universal و Fluent
  • طراحی و توسعه تجربه کاربری (UX) و رابط کاربری (UI)
    • طراحی رابط کاربری (UI)
    • طراحی تجربه کاربری (UX)
  • درخواست انجام پروژه (ویژه)
    • پروژه‌های منبع‌باز
  • سوالات و مباحث عامیانه
    • سوالات دانشجویی
    • فناوری و سخت افزار
    • سوالات مشاوره‌ای و تخصصی مرتبط با حوزه‌ی برنامه‌نویسی
  • سطل آشغال
    • سطل آشغال

Product Groups

  • کتاب‌ها و مقالات آموزشی

دسته ها

  • علمی
  • استارتاپی
  • برنامه‌نویسی
    • زبان‌های برنامه نویسی
    • معماری‌ها
  • کامپایلر و مفسر
  • محیط‌های توسعه
  • پلتفرم‌های توسعه
  • کدنویسی ایمن
  • فناوری‌ها
    • پردازش تصویر
    • اینترنت اشیاء
    • پردازش ابری (Cloud Computing)
    • چند سکویی (Cross-Platform)
    • بیگ دیتا (Big Data)
    • هوش مصنوعی (AI)
    • سخت افزار
    • نرم‌افزار و اپلیکیشن
    • اینترنت و شبکه
    • رمزنگاری
    • امبد‌ها (Embedded)
  • طراحی
    • تجربه کاربری
    • رابط کاربری

دسته ها

  • عمومی
  • گرافیکی
  • شبکه و ارتباطات

دسته ها

  • کامپایلر‌ها
  • محیط‌های توسعه
  • کتابخانه‌ها
  • ماژول‌ها و پلاگین‌ها
  • محصولات بومی
  • کتاب‌ها و مقالات
  • زبان‌ها و ابزار‌ها
  • طراحی و گرافیک

جستجو در ...

نمایش نتایجی که شامل ...


تاریخ ایجاد

  • شروع

    پایان


آخرین بروزرسانی

  • شروع

    پایان


فیلتر بر اساس تعداد ...

تاریخ عضویت

  • شروع

    پایان


گروه


شناسه گیت‌هاب


شناسه لینکدین


شهر

2 نتیجه پیدا شد

  1. الهه انصاری

    شاخص عملکرد کلیدی (KPI)

    اگر شما یک تیم را مدیریت می‌کنید، به احتمال زیاد در مورد شاخص‌های عملکرد کلیدی (Key Performance Indicator, KPI) شنیده اید. صرف نظر از این که آیا شما با آنها آشنا هستید و یا هنوز در ذهنتان این سوال وجود دارد که «دقیقا KPI چیست؟»، اجازه دهید قبل از این که به بعضی نمونه‌ها و معادلات نمونه برای مهمترین معیارها برسیم، یک دوره‌ی تجدید نظر کوتاهی داشته باشیم. قبل از پرداختن به تعدادی نمونه، ابتدا KPI را تعریف کنیم. به زبان ساده، KPI نوعی اندازه گیری عملکرد است که به شما کمک می‌کند تا بدانید بخش یا سازمان شما چگونه کار می‌کند. KPI خوب باید به عنوان یک قطب نما عمل کند و به شما و تیمتان کمک کند تا متوجه شوید که آیا مسیر درستی را برای رسیدن به اهداف استراتژیک خود در نظر گرفته‌ اید. برای موثر بودن، KPI باید شرایط زیر را داشته باشد: به خوبی تعریف شده و قابل سنجش باشد. باید با سراسر سازمان و بخش شما در ارتباط باشد. باید برای دستیابی به هدف شما ضروری باشد. قابل اعمال به خط کسب و کار (Line of Business, LoB) یا بخش شما باشد. مشکل این است که هزاران کاندید برای انتخاب KPIها را وجود دارد. اگر شما مورد اشتباهی را انتخاب کنید، چیزی را اندازه گیری خواهید کرد که با اهدافتان همخوانی ندارد. بنابراین، چگونه باید KPIهای مناسب را برای سازمان خود انتخاب کنید؟ بهترین راه برای رسیدن به این هدف، تحقیق و درک برخی از مهم‌ترین KPIها است. بدین ترتیب، شما درک بهتری خواهید داشت که انتخاب کدام یک برای کسب و کار شما مفید است و کدام سودی نخواهد داشت. ۱۸ مثال و تعریف از KPIها معیارهای مالی ۱. سود: نیاز به تعریف نیست اما باید خیلی به آن توجه کنید زیرا یکی از مهمترین شاخص‌های عملکردی موجود است. سود حاشیه‌ای ناخالص (gross margin) و سود حاشیه‌ای خالص (net profit margin) را آنالیز کنید تا متوجه شوید که آیا سازمانتان بازدهی بالایی داشته است یا خیر. ۲. هزینه: هزینه‌ی بهره‌ وری را اندازه گیری کنید . بهترین راه‌های کاهش و مدیریت هزینه‌ها را بیابید. ۳. درآمد LoB در مقابل هدف: این مورد یک مقایسه بین درآمد واقعی شما و درآمد پیش بینی شده‌ی شما است. نمودار کردن و تجزیه و تحلیل اختلاف بین این دو عدد کمک خواهد کرد که متوجه شوید بخش تحت مدیریت شما چگونه عملکردی دارد. ۴. هزینه‌ی محصولات فروخته‌ شده: با در نظر گرفتن تمامی هزینههای تولیدی برای محصولی که شرکت شما در حال فروش است، می‌توانید ایده‌ی بهتری برای قیمت گذاری بر اساس هزینه‌ی محصولات و سود حاشیه‌ای واقعی (actual profit margin) خود داشته باشید. این اطلاعات در تعیین این که چگونه در رقابت کسب و کار پیروز شوید نقش کلیدی دارد. ۵. روز فروش برجسته (Day Sales Outstanding, DSO): حساب‌های دریافتی خود را در نظر بگیرید و آن‌ها را به تعداد کل فروش‌های اعتباری تقسیم کنید. این عدد را به تعداد روزهای محدوده‌ی زمانی که مورد بررسی قرار می دهید، ضرب کنید. تبریک می‌گوییم، شما DSO خود را حساب کردید! هرچه این عدد کوچکتر باشد، یعنی این که سازمان شما در جمع آوری بدهی‌ها بهتر عمل می‌کند. این فرمول را هر ماه، هر سه ماه یا هر سال را اجرا کنید تا ببینید که وضعیتتان چه روندی دارد. ۶. میزان فروش برحسب منطقه: از طریق تجزیه و تحلیل این که کدام منطقه اهداف فروش ما را برآورد می‌کنند، می‌توانید بازخورد بهتری برای مناطق کم درآمد داشته باشید. ۷. هزینه‌های LoB در مقابل بودجه: مخارج واقعی خود را با بودجه‌ی پیش بینی شده‌ی خود مقایسه کنید. درک این که در در کدام قسمت از برنامه‌ی خود متزلزل شده اید، می‌تواند در آینده به شما برای ایجاد یک بودجه‌ی عالی‌تر اداری کمک کند. معیار‌های مشتری ۸. ارزش طول عمر مشتری (CLV): صرفه جویی در هزینه تنها (یا بهترین) راه برای بهینه سازی جذب مشتری شما نیست. CLV به شما کمک می‌کند که ارزش سازمان خود را از طریق یک رابطه‌ی بلند مدت با مشتری درک کنید. از این شاخص عملکرد برای محدود کردن کانالی استفاده کنید که به شما کمک میکند تا بهترین مشتریان را برای بهترین قیمت به دست آورید. ۹. هزینه‌ی جذب یا خرید مشتری (CAC): هزینههای جذب خود را به تعداد مشتریان جدید در محدوده ی زمانی مورد بررسی تقسیم کنید. با این روش شما مقدار عددی CAC را محاسبه کردید! CAC یکی از مهم‌ترین معیارهای تجارت الکترونیک محسوب می‌شود زیرا می‌تواند به شما در ارزیابی اثربخشی هزینه‌های بازاریابی کمک کند. ۱۰. رضایت و حفظ مشتری (CSR): این مورد، در ظاهر خیلی ساده است. مشتری‌ها را شاد کنید و آن‌ها همچنان مشتری شما خواهند بود. با این حال، بسیاری از شرکت‌ها معتقدند که برای سهامداران ارزش بیشتری نسبت به مشتریان دارد. شما می‌توانید از شاخص‌های عملکرد چندگانه از جمله نمرات رضایت مشتری و درصد مشتریانی که خریدشان را تکرار می‌کنند، برای سنجش CSR استفاده کنید. ۱۱. امتیاز پیش‌برنده‌ی خالص (Net Promoter Score, NPS): مقدار عددی NPS یکی از بهترین‌ شاخص‌های حاکی از رشد بلند مدت شرکت است. برای تعیین نمره‌ی NPS خود، بررسی‌های سه ماهه‌ی خود را به مشتریان ارسال کنید تا ببینید که چقدر احتمال دارد سازمان شما را به کسانی که می‌شناسند توصیه کنند. ابتدا با اولین بررسی خود، یک حالت پایه‌ای بسازید و اقدامات لازم را انجام دهید تا بتوانید این تعداد را در سه ماهه‌های متوالی افزایش دهید. ۱۲. تعداد مشتریان: این شاخص عملکرد نیز مانند سود نسبتا ساده است. با تعیین تعداد مشتریانی که کسب کرده اید و از دست داده اید، میتوانید بیشتر درک کنید که آیا شما نیازهای مشتریان خود را برآورده می‌کنید یا خیر. معیار‌های فرآیندی ۱۳. تیکت‌های پشتیبانی مشتری (Customer Support Tickets): تجزیه و تحلیل تعداد تیکت‌های جدید، تعداد تیکت‌های بررسی شده و زمان بررسی به شما کمک خواهد کرد که بهترین بخش خدمات را در صنعت خود ایجاد کنید. ۱۴. درصد ضایعات محصول: تعداد واحدهای معیوب را بیابید و آن را به تعداد کل واحدهای تولید شده در محدوده‌ی زمانی مورد بررسی تقسیم کنید. واضح است که این عدد هر چقدر پایین‌تر باشد، بهتر است. ۱۵. اندازه گیری کارایی LoB: میزان کارایی و بهره‌وری را می‌توان در هر صنعتی اندازه گیری کرد. به عنوان مثال در صنعت تولید می‌توانید کارایی سازمان خود را با تجزیه و تحلیل تعداد واحدهای تولید شده در هر ساعت و میزان زمان کارکرد کارخانه خود، اندازه گیری کنید. معیار‌های نیروی انسانی ۱۶. نرخ گردش کار کارکنان (Employee Turnover Rate, ETR): برای تعیین ETR، تعداد کارکنانی که شرکت را ترک کرده اند به میانگین کارکنان تقسیم کنید. اگر ETR بالایی دارید، وقت خود را صرف بررسی فرهنگ محل کار خود، بسته‌های کاری و محیط کار کنید. ۱۷. درصد پاسخ به فرصت‌های شغلی باز: هنگامی که شما درصد بالایی از متقاضیان واجد شرایط را برای موقعیت‌های شغلی باز خود درخواست می‌کنید، می‌دانید که مخاطبان مناسب را پیدا می‌کنید. این امر به افزایش تعداد مصاحبه شوندگان نیز منجر خواهد شد. ۱۸. رضایت کارکنان: اگر کارکنان شما خوشحال باشند، سخت‌تر کار و تلاش می‌کنند؛ به همین سادگی! ارزیابی رضایتمندی کارکنان از طریق نظرسنجی و معیارهای دیگر برای سلامت اداری و سازمانی شما حیاتی است. ۱۳ مثال و تعریف مفید دیگر از KPIها معیار‌های نیروی انسانی ۱. نرخ بازنشستگی: این معیار برای هر سازمانی که یک طرح نیروی کار استراتژیک را توسعه می‌دهد بسیار مهم است. این مورد را می‌توان با بررسی تعداد کارکنانی که بازنشسته شده اند به عنوان درصدی از کل تعدادکارکنان به دست آورد. اگر نیروی کار پیری نداشته باشید، گردش مالی نیز معیار خوبی است. ۲. دانش به دست آمده با آموزش: این مورد به شرکت کمک می‌کند تا اثربخشی آموزش کارمندان را ببیند. با ایجاد یک امتحان و نظارت بر درصد نرخ قبولی و درصد متوسط نمره می‌توان این مورد را بررسی کرد. اگر شما یک سازمان بزرگ‌تر هستید، قبل از آموزش می‌توانید از یک پیش آزمون (pre-test) استفاده کنید و سپس بعد از تمرین از یک پس آزمون (post-test) برای مشخص کردن آن چه که کارکنان آموخته اند، کمک بگیرید. ۳. ارتقاء داخلی در مقابل استخدام خارجی (Internal Promotions Vs. External Hires): این معیار نسبت تعداد کارکنان مشغول کار در یک شرکت (ارتقاء داخلی) به تعداد استخدام‌های خارجی را مشخص می‌کند. این امر می‌تواند به طور خاص در برنامه ریزی جانشینی‌های سازمانی موثر باشد. ۴. نسبت رقابت پذیری دستمزد (Salary Competitiveness Ratio, SCR): برای ارزیابی میزان رقابت پذیری گزینه‌های جبران خسارت استفاده می‌شود. این نسبت با تقسیم حقوق و دستمزد شرکت به حقوق و دستمزد متوسط ارائه شده توسط رقبا یا بخش‌های دیگر صنعت شما تعیین می‌شود. معیارهای مشتری ۵. نرخ تعویض مشتری (Customer Churn Rate): این معیار درصد مشتریانی را نشان می‌دهد که یا دیگر خرید خود را تکرار نمی‌کنند و یا خدمات خود را در طول یک دوره‌ی معین متوقف می‌کنند. محاسبه‌ی این معیار با تقسیم تعداد مشتریان از دست رفته در یک دوره بر تعداد کل مشتریان در شروع دوره انجام می‌پذیرد. اطمینان حاصل کنید که تعداد مشتریانی را در نظر بگیرید که باید در آن دوره تجدید سرویس انجام دهند. ۶. میزان تماس‌های دریافتی از طریق کانال‌های ارتباطی مختلف: پیگیری تعداد درخواست‌های پشتیبانی از طریق تلفن و ایمیل به شما این امکان را می‌دهد تا ببینید مشتریان کدام روش را ترجیح می‌دهند. این بررسی را می توانید به صورت ماهانه تکرار کنید. ۷. درصد مشتریانی که «خیلی» و «شدیدا» راضی هستند: تعیین این معیار فرصتی است برای بررسی بیشتر آن چه که مشتریانِ خوشحال را راضی می‌کند و باید در طول یک زمان مشخص و مناسب بررسی شود. بنابراین سوالات خود را در نظر سنجی‌ها مربوط به هم مطرح کنید. محاسبه‌ی این معیار بسیار ساده است بدین صورت که نسبت مشتریان «خیلی» و «شدیدا» راضی را به کل تعداد پاسخ دهندگان محاسبه می‌کنید. ۸. بازدید‌های جدید و تکراری وب سایت: این امکان را برای شرکت‌ها فراهم می‌کند تا ترافیک وب سایت خود را متفاوت کرده و بینش خاصی را بر روی مشتریان بالقوه‌ی خود ایجاد کنند. این معیار با تقسیم تعداد بازدید کنندگان جدید به کل تعداد بازدیدها به دست می‌آید. معیارهای مالی ۹. جریان نقدی از فعالیتهای تامین مالی: این معیار نشان دهنده‌ی قدرت مالی سازمان میباشد و به صورت زیر محاسبه می‌گردد: (سهام / پول نقدی پرداخت شده به عنوان سود سهام و بازپرداخت بدهی) - (پول نقد دریافت شده از اوراق بهادار یا بدهی) = (جریان نقدی از فعالیت‌های تامین مالی) ۱۰. متوسط هزینههای سالانه برای سرویس یک مشتری: این مقدار متوسط مورد نیاز برای خدمت به یک مشتری است که با تقسیم مجموع هزینه‌ها به تعداد کل مشتریان حاصل می‌شود. ۱۱. EBITDA: خلاصه شده‌ی "Earnings Before Interest, Taxes, Depreciation, & Amortization" است که مقدار درآمد را بعد از در نظر گرفتن هزینه‌ها و کم کردن بهره، مالیات و استهلاک محاسبه می‌کند. ۱۲. هزینه‌های نوآوری: این معیار میزان پولی را که سازمان برای نوآوری هزینه می‌کند، نشان می‌دهد. بعضی از سازمان‌ها این هزینه را جهت تحقیق و توسعه در نظر می‌گیرند و ممکن است که سازمان‌های دیگر دارای شرایط حسابداری متفاوت باشند. در نهایت، اگر شما از این معیار استفاده میکنید، نوآوری را به عنوان یک استراتژی کلیدی قبول دارید. ۱۳. نسبت ارزش ماندگاری مشتری به هزینه‌ی خرید مشتری: نسبت ارزش ماندگاری مشتری به هزینه‌ی جذب مشتری، در صورت مطلوب، باید بیشتر از یک باشد. اگر هزینه‌ی به دست آوردن مشتری بیشتر از سود آن باشد، در این صورت این مشتری سودآور محسوب نمی‌شود. چگونه KPI‌ مناسب را انتخاب کنم؟ KPIهای مناسب برای شما ممکن است KPIهای مناسبی برای یک سازمان دیگری نباشند. اطمینان حاصل کنید که در مورد بسیاری از شاخصهای عملکرد کلیدی تحقیق کرده اید، در این صورت میتوانید تعیین کنید که کدام یک برای صنعت شما مناسب است. تعیین اهداف KPI به شما در درک و مقابله با اهدافتان کمک خواهد کرد و سپس آن‌ها را در بخش خود ادغام کنید. KPIها نه تنها باید با صنعت شما بلکه با استراتژی شما نیز منطبق باشند.
  2. 10 تکنیک کاربردی که باعث بهینه شدن عملکرد برنامه های جاوا می شود. 1. Use StringBuilder Class: به عنوان یک قاعده کلی برای تولید رشته های پیچیده با عملگر (+) ، همیشه از کلاس StringBuilder استفاده نمایید. String x = "a" + args.length + "b"; که کد فوق به شبه کد زیر کامپایل خواهدشد... همانطور که مشاهده میکنید خود کامپایلر جاوا هم عملگر + برای جمع چند رشته، به کلاس StringBuilder تفسیر میکند. 0 new java.lang.StringBuilder [16] 3 dup 4 ldc <String "a"> [18] 6 invokespecial java.lang.StringBuilder(java.lang.String) [20] 9 aload_0 [args] 10 arraylength 11 invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [23] 14 ldc <String "b"> [27] 16 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [29] 19 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [32] 22 astore_1 [x] اما چه اتفاقی می افتد، اگر بعدا، شما String خود را با رشته های جدید تغییر دهید؟ String x = "a" + args.length + "b"; if (args.length == 1) x = x + args[0]; اکنون شما StringBuilder دوم خواهید داشت، که صرفا حافظه را از پشته خود می گیرد با این کار باعث افزایش فشار بر روی GC خواهید شد. به جای آن بهتر است بنویسید: StringBuilder x = new StringBuilder("a"); x.append(args.length); x.append("b"); واگر String هایی که می خواهید به هم پیوند دهید پیچیده هستند، مرجع StringBuilder را نگه دارید و در متدهای دیگر هم از همان استفاده نمایید. 2. Avoid regular expressions : عبارات منظم نسبتا ارزان و راحت هستند. اما اگر منظور شما از بیان عبارت منظم چنین چیزی هست که به هیچ وجه قابل قبول نیست.! String[] parts = ipAddress.split("\\."); پس بهتر است به کاراکترهای معمولی با عملگر دستیابی[] مبتنی بر شاخص دست یابید. به عنوان مثال این حلقه کاملا همان کار را انجام می دهد: int length = ipAddress.length(); int offset = 0; int part = 0; for (int i = 0; i < length; i++) { if (i == length - 1 || ipAddress.charAt(i + 1) == '.') { parts[part] = ipAddress.substring(offset, i + 1); part++; offset = i + 2; } } عبارات منظم مفید هستند اما آنها پر هزینه هستند شما باید از عبارات منظم پر هزینه اجتناب کنید. مراقب استفاده از انواع روش های JDK String که از عبارات منظم مانند String.replaceAll () یا String.split () استفاده می کند، باشید. برای مثال می توانید از کتابخانه های محبوبی مانند Apache Commons Lang به جای این روشها استفاده نمایید برای دستکاری رشته ها. 3. ()Do not use iterator: نوشتن شیوه های foreach سبک جاوا 5 مناسب است. شما فقط می توانید به طور کامل در مورد داخل منطق حلقه ها فکر کنید و بنویسید ... for (String value : strings) { // Do something useful here } با این حال، هر زمانی که شما به این حلقه وارد می شوید، اگر رشته ای قابل تغییر باشد، یک نمونه جدید Iterator ایجاد خواهید کرد. اگر شما از ArrayList استفاده می کنید، این موضوع در حال تخصیص یک شی با 3 بلاک در قسمت پشته برنامه شما هست طبق تفسیر کلاس زیر... private class Itr implements Iterator<E> { int cursor; int lastRet = -1; int expectedModCount = modCount; // ... در عوض، شما می توانید حلقه معادل زیر را بنویسید و تنها یک مقدار int را در پشته صرف کنید، شاید کد کثیف تری باشد از نظر بصری، اما بهینه تر است... int size = strings.size(); for (int i = 0; i < size; i++) { String value : strings.get(i); // Do something useful here } Iterators، Iterable و حلقه foreach از دیدگاه نوشتن پذیری و قابلیت خواندن، و همچنین از دیدگاه طراحی API بسیار مفید هستند. با این حال، آنها یک نمونه جدید کوچک را در پشته برای هر تکرار تنها ایجاد می کنند. اگر تكرارهای زیادی را اجرا می كنید، می خواهید مطمئن شوید كه این نمونه بی فایده را ایجاد نمی كنید، به جای آن از تكرارهای مبتنی بر index استفاده نمایید. 4. Don’t call that method : برخی از متدها پر هزینه هستند. فرض کنید که JDBC Driver شما نیاز به انجام مشکل فوق العاده برای محاسبه مقدار ResultSet.wasNull() داشته باشد . کد چارچوب SQL homegrown شما ممکن است مانند این باشد: if (type == Integer.class) { result = (T) wasNull(rs,Integer.valueOf(rs.getInt(index))); } // And then... static final <T> T wasNull(ResultSet rs, T value) throws SQLException { return rs.wasNull() ? null : value; } این منطق اکنون ResultSet.wasNull () را هر بار که int را از مجموعه نتیجه به دست می آورد، فراخوانی می کند. اما متد getInt()می نویسد: مقدار بازگشت: مقدار ستون؛ اگر مقدار SQL NULL باشد، مقدار بازگشتی 0 است بنابراین، یک متد ساده اما در عین حال احتمالا دشوار رو به بالا می تواند این باشد: static final <T extends Number> T wasNull( ResultSet rs, T value ) throws SQLException { return (value == null || (value.intValue() == 0 && rs.wasNull())) ? null : value; } 5. Use primitives and the stack : از استفاده انواع بسته بندی ها در تعریف متغیرها از نوع اولیه اجتناب کنید.. //heap ذخیره در Integer i = 817598; //stack ذخیره در int i = 817598; وقتی که از آرایه ها استفاده می کنید، بدتر هم می شود: //heap سه شی در Integer[] i = { 1337, 424242 }; //heap یک شی در int[] i = { 1337, 424242 }; استثنا برای این قاعده وجود دارد: boolean و بایت مقادیر کافی برای ذخیره شدن توسط JDK دارند. شما می توانید بنویسید: Boolean a1 = true; // ... syntax sugar for: Boolean a2 = Boolean.valueOf(true); Byte b1 = (byte) 123; // ... syntax sugar for: Byte b2 = Byte.valueOf((byte) 123); همین امر برای مقادیر اولیه از انواع دیگر، از جمله char، short، int، long، صادق است. هرگز سازنده را بر روی انواع بسته بندی نکنید، مگر اینکه واقعا یک نمونه جدید را بخواهید. 6. Avoid recursion : زبان برنامه نویسی مدرن مانند Scala، استفاده از بازگشت را تشویق می کند، زیرا آنها ابزار بهینه سازی الگوریتم های بازگشت به تکرار تبدیل می کنند. اگر زبان شما از چنین خوش بینی ها پشتیبانی می کند، ممکن است خوب باشد. اما حتی در این صورت، کوچکترین تغییر الگوریتم ممکن است یک شاخه ای ایجاد کند که مانع بازگشت شما از بازگشت بازگشتی می شود. که البته باید امیدوار باشید که کامپایلر این خطای منطقی را شناسایی کند! در غیر این صورت، شما ممکن است بسیاری از فریم های پشته را برای چیزی که ممکن است با استفاده از چند متغیر محلی اجرا شود، هزینه کرده اید. بنابراین سعی کنید تا حد امکان از الگوریتم های بازگشتی استفاده نکنید.(تمامی الگوریتم های بازگشتی را می توان با استفاده از حلقه های for , while پیاده سازی کرد) 7. ()Use entrySet : همیشه ازentrySet ()استفاده کنید وقتی که در طول تکرار Map به دو کلید و مقدار نیاز دارید. for (K key : map.keySet()) { V value = map.get(key); } //به جای کد بالا for (Entry<K, V> entry : map.entrySet()) { K key = entry.getKey(); V value = entry.getValue(); } 8. Use EnumSet or EnumMap : بعضی موارد وجود دارد که تعداد کلید های ممکن در یک Map پیش از آن شناخته شده است - مثلا هنگام استفاده از یک Map پیکربندی. اگر این تعداد نسبتا کوچک باشد، باید به جای HashSet یا HashMap به طور منظم از EnumSet یا EnumMap استفاده کنید. به سادگی با نگاه کردن بهEnumMap.put () توضیح داده شده است: private transient Object[] vals; public V put(K key, V value) { // ... int index = key.ordinal(); vals[index] = maskNull(value); // ... } ماهیت این پیاده سازی این واقعیت است که ما یک آرایه از مقادیر نشان داده شده به جای یک جدول هش داریم. هنگام وارد کردن یک مقدار جدید، همه کاری که ما باید انجام دهیم برای یافتن ورودی Map از enum برای ترتیب ثابت آن است که توسط کامپایلر جاوا در هر نوع enum ایجاد می شود. اگر این یک Map پیکربندی Static است (یعنی تنها یک نمونه)، افزایش سرعت دسترسی به EnumMap کمک خواهد کرد که HashMap را به شدت بهبود بخشد، که ممکن است از حافظه heap کمی استفاده کند. Enum و EnumMap بسیار نزدیک هستند. هر زمان که از ساختارهای enum مثل کلید استفاده می کنید، در واقع ساختن این ساختارها را در نظر بگیرید و از آنها به عنوان کلید در EnumMap استفاده کنید. 9. Optimise your hashCode() and equals() methods : اگر شما نمیتوانید از EnumMapاستفاده کنید، دست کم متدهای hashCode()وequals() را بهینه کنید.(سعی کنید این دومتد را باهم پیاده سازی کنید.) یک متد خوبhashCode() ضروری است، زیرا باعث می شود که تماسهای بیشتری به نسبت برابر با مقدار بسیار پر هزینه جلوگیری شود، زیرا GC بیشتری را در هر نمونه از آنها تولید می کند. @Override public int hashCode() { // [#1938] This is a much more efficient hashCode() // implementation compared to that of standard // QueryParts return name.hashCode(); } @Override public boolean equals(Object that) { if (this == that) { return true; } // [#2144] Non-equality can be decided early, // without executing the rather expensive // implementation of AbstractQueryPart.equals() if (that instanceof AbstractTable) { if (StringUtils.equals(name, (((AbstractTable<?>) that).name))) { return super.equals(that); } return false; } return false; } 10. Think in sets, not in individual elements : متاسفانه، بسیاری از برنامه نویسان از نظر الگوریتم های ساده، محلی فکر می کنند. آنها گام به گام یک مشکل را حل می کنند، شاخه شاخه، حلقه با حلقه، متد و روش. این سبک اجرایی و / یا برنامه نویسی کاربردی است. در حالی که به طور فزاینده ای آسان است که "تصویر بزرگتر" را در حال حرکت از حالت ضروری به شیء گرا (همچنان ضروری) تا برنامه نویسی کارآمد، همه این سبک ها چیزی ندارند که فقط در SQL و R و زبان های مشابه وجود دارد: Declarative programming // Pre-Java 8 Set result = new HashSet(); for (Object candidate : someSet) if (someOtherSet.contains(candidate)) result.add(candidate); // Even Java 8 doesn't really help someSet.stream() .filter(someOtherSet::contains) .collect(Collectors.toSet()); برخی ممکن است استدلال کنند که برنامه نویسی کاربردی و جاوا 8 به شما کمک می کند تا ساده تر، الگوریتم های مختصر تر بنویسید. این لزوما درست نیست شما می توانید ضرورت Java 7 loop خود را به یک مجموعه کاربردی Java 8 Stream ترجمه کنید، اما هنوز همان الگوریتم را نوشته اید. و برای بهینه تر کردن برنامه های خود می توانید از ابزار قدرتمند JProfiler's که در این آدرس Java Profiler - JProfiler موجود می باشد استفاده نمایید.
×