راه اندازی DevTools اکنون 13٪ سریعتر است (از 11.2 به 10 ثانیه)
TL;DR; نتیجه با حذف یک سریال اضافی به دست می آید.
نمای کلی
هنگامی که DevTools در حال راه اندازی است، باید با موتور جاوا اسکریپت V8 تماس برقرار کند.
مکانیزمی که Chromium برای ارسال دستورات DevTools به V8 (و به طور کلی برای IPC) استفاده می کند، mojo
نامیده می شود. هم تیمی های من Benedikt Meurer و Sigurd Schneider در حین کار بر روی کار دیگری متوجه ناکارآمدی شدند و با حذف دو مرحله اضافی در نحوه ارسال و دریافت این پیام ها، ایده ای برای بهبود روند ایجاد کردند.
اجازه دهید به نحوه عملکرد مکانیسم mojo
بپردازیم!
مکانیسم های mojo
یک دستور mojo EvaluateScript
وجود دارد که دستور JS را اجرا می کند. کل دستور JS از جمله arguments
در رشته ای از کد منبع جاوا اسکریپت که می تواند eval()
باشد، سریال می کند. همانطور که ممکن است تصور کنید، این رشته ها می توانند بسیار بلند و گران شوند. پس از دریافت دستور توسط V8، این رشتهها از کد جاوا اسکریپت قبل از اجرا از حالت سریال خارج میشوند. این فرآیند سریالسازی و سریالزدایی برای هر پیام منفرد، سربار قابلتوجهی ایجاد میکند.
بندیکت مورر متوجه شد که سریالسازی و سریالزدایی arguments
بسیار پرهزینه است و کل مراحل «Serialize JS command to string JS» و «Deserialize JS string» اضافی هستند و میتوان آنها را نادیده گرفت.
جزئیات فنی: RenderFrameHostImpl::ExecuteJavaScript
چقدر پیشرفت کردیم
ما یک متد mojo API دیگر را معرفی کردیم که به ما اجازه میدهد به جای ایجاد رشته کد منبع جاوا اسکریپت، نام شی، روشی که باید فراخوانی میشود و فهرست آرگومانها را مستقیماً ارسال کنیم. این به ما امکان میدهد از سریالسازی و سریالزدایی صرفنظر کنیم، و نیاز به تجزیه کد جاوا اسکریپت را برطرف میکند.
برای جزئیات فنی در مورد نحوه اجرای این بهینه سازی، به این دو وصله مراجعه کنید:
- CL 2431864: [devtools] کاهش سربار عملکرد ارسال پیام در قسمت جلویی
- CL 2442012: [devtools] از
ExecuteJavaScriptMethod
در DevTools استفاده کنید
تاثیر
برای اندازهگیری اثربخشی تغییر، برخی از اندازهگیریها را با مقایسه نسخههای Chromium cb971089a058 و 4f213b39d581 (قبل و بعد از تغییر) انجام دادیم.
برای هر دو ویرایش، سناریوی زیر را 5 بار اجرا کردیم:
- ردیابی را با استفاده از
chrome://tracing
ضبط کنید - DevTools-on-DevTools را باز کنید
- ردیابی ثبت شده
CrRendererMain
را دریافت کنید و معیارهای ویژه V8 را مقایسه کنید.
بر اساس این آزمایشها، DevTools با بهینهسازی، 13 درصد سریعتر باز میشود (از 11.2 ثانیه به 10 ثانیه) .
نکات برجسته، مدت زمان CPU
نام روش | بهینه نشده (ms) | بهینه شده (ms) | تفاوت ها (ms) | بهبود سرعت (%) |
مجموع | 11,213.19 | 9,953.99 | -1259.20 | 12.65٪ |
v8.run | 499.67 | 3.61 | -496.06 | 12.65٪ |
V8.Execute | 1,654.87 | 1,349.61 | -305.25 | 3.07٪ |
v8.callFunction | 1,171.84 | 1,339.77 | 167.94 | -1.69٪ |
v8.compile | 133.93 | 3.56 | -130.37 | 1.31٪ |
جدول مقایسه معیارهای ردیابی کامل
در نتیجه، DevTools با استفاده از CPU کمتر باز میشود و سریعتر کار میکند . 🎉
کانال های پیش نمایش را دانلود کنید
استفاده از Chrome Canary ، Dev یا Beta را به عنوان مرورگر توسعه پیشفرض خود در نظر بگیرید. این کانالهای پیشنمایش به شما امکان دسترسی به جدیدترین ویژگیهای DevTools را میدهند، به شما اجازه میدهند APIهای پلتفرم وب پیشرفته را آزمایش کنید و به شما کمک میکنند تا قبل از کاربران، مشکلات سایت خود را پیدا کنید!
با تیم Chrome DevTools در تماس باشید
از گزینههای زیر برای بحث در مورد ویژگیهای جدید، بهروزرسانیها یا هر چیز دیگری مربوط به DevTools استفاده کنید.
- بازخورد و درخواست های ویژگی را برای ما در crbug.com ارسال کنید.
- یک مشکل DevTools را با استفاده از گزینه های بیشتر > راهنما > گزارش مشکل DevTools در DevTools گزارش کنید.
- توییت در @ChromeDevTools .
- نظرات خود را در مورد موارد جدید در ویدیوهای DevTools YouTube یا DevTools Tips ویدیوهای YouTube بگذارید.