متن خبر

نحوه دریافت اولین خط یک رشته چند خطی در جاوا اسکریپت

نحوه دریافت اولین خط یک رشته چند خطی در جاوا اسکریپت

شناسهٔ خبر: 445549 -




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

در این مقاله، ما به سه روشی که می توانید خط اول یک رشته چند خطی را در JS به دست آورید، نگاه می کنیم.

برای کسانی که عجله دارند، بهترین راه حل اینجاست:

 input.slice("\n", input.indexOf("\n"));

و اکنون اگر می خواهید بیشتر بدانید، بیایید عمیقاً به جزئیات بپردازیم.

مشکل

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

با یک مثال توضیح می دهیم.

فرض کنید، من یک رشته غول پیکر دارم که شامل 10 میلیون خط متن است و می خواهم اولین خط آن را دریافت کنم. پس من از روش Array.split مانند مثال زیر استفاده می کنم:

 input.split("\n")[0];

در این کد، روش split در کل 10 میلیون خط عمل می کند تا فقط خط اول را بدست آورد. در نتیجه، برای به دست آوردن تنها مورد اول، آرایه ای حاوی 10 میلیون آیتم دارم.

این عملیات در رایانه شخصی من تقریباً 1.7 ثانیه طول می کشد. این برای چنین عملیات کوچکی بی جهت طولانی است.

بیایید راه حل هایی را برای غلبه بر این مشکل تحلیل کنیم.

راه حل ها

پس از کمی تحقیق، سه راه عالی برای انجام این عمل را پیدا کردم:

    با استفاده از متدهای String.indexOf و String.slice .

    با استفاده از روش Array.split .

    با استفاده از روش String.match .

در اینجا نتایج معیار هر راه حل آورده شده است:

تصویر-128

همچنین، می توانید از این لینک به نتایج بنچمارک دسترسی داشته باشید و خودتان نیز بنچمارک ها را انجام دهید.

بیایید هر راه حل را جداگانه تحلیل کنیم.

1. با استفاده از روش های String.indexOf و String.slice

در این راه حل، از متد String.indexOf برای یافتن شاخص کاراکتر خط جدید ( \n ) استفاده می کنیم و سپس با متد String.slice رشته را به این شاخص برش می دهیم.

 input.slice("\n", input.indexOf("\n"));

این راه حل در رتبه اول نتایج معیار قرار می گیرد.

2. با استفاده از روش Array.split

همانطور که در مشکل مشاهده کردید، متد Array.split روی کل رشته عمل می کند. اما یک پارامتر limit اختیاری را نیز می پذیرد. ما می توانیم از این پارامتر برای جلوگیری از عملیات غیر ضروری استفاده کنیم.

 input.split("\n", 1)[0];

در این کد از پارامتر limit اختیاری استفاده کردیم و پس پس از اولین عملیات تقسیم، عملیات متوقف می شود.

این راه حل در نتایج معیار جایگاه دوم را دارد.

3. با استفاده از روش String.match

این رویکرد برای کسانی از شماست که به طور خاص می خواهند از regex استفاده کنند.

در این مورد از متد String.match استفاده خواهیم کرد. ما یک regex literal ایجاد می کنیم که با هر گروه کاراکتری که یک کاراکتر خط جدید دنبال می شود مطابقت دارد و آن را به متد ارسال می کنیم. اولین عنصر آرایه برگشتی (که مطابقت دارد) خط اول است.

 input.match(/.*(?=\n)/)[0];

این راه حل رتبه سوم را در نتایج معیار می گیرد و دو برابر کندتر از راه حل اول عمل می کند.

طبق MDN :

قبل از اینکه بتوان از عبارات منظم استفاده کرد، باید آنها را کامپایل کرد.

کاهش عملکرد احتمالا به این دلیل است.

نتیجه

در این مقاله، ما به سه روش مختلف برای به دست آوردن خط اول یک رشته چند خطی نگاه کرده ایم.

به عنوان توسعه دهندگان، حتی برای چنین عملیات کوچکی، باید موارد لبه را در نظر بگیریم تا از مشکلات احتمالی در آینده جلوگیری کنیم.

ممنون که خواندید. می توانید با من در توییتر ارتباط برقرار کنید یا در وبلاگ شخصی من بیشتر کاوش کنید. با خیال راحت تماس بگیرید - من دوست دارم از شما بشنوم!

خبرکاو

ارسال نظر




تبليغات ايهنا تبليغات ايهنا

تمامی حقوق مادی و معنوی این سایت متعلق به خبرکاو است و استفاده از مطالب با ذکر منبع بلامانع است