چرا اپ ساختهشده با هوش مصنوعیتان کند حس میشود (و دربارهٔ آن چه کنید)
راهنمایی به زبان ساده دربارهٔ چهار دلیلی که اپهای ساختهشده با هوش مصنوعی کُند حس میشوند — تصویرها، فهرستها، صفحههای انتظار، و پایگاه داده — و راهحلِ هرکدام که میتوانید از اپساز هوش مصنوعیتان بخواهید انجام دهد.
اپ ساختهشده با هوش مصنوعیتان کار میکند. دکمهها به جای درست میروند، صفحهها سرجایشان قرار میگیرند، دادهها ذخیره میشوند. اما یک چیزی درست حس نمیشود. صفحهها یک لحظه بیش از حد طول میکشند تا بارگذاری شوند. فهرستی از پنجاه مورد یک ثانیه معلق میماند. کلیک روی «ذخیره» وادارتان میکند صبر کنید، بعد کمی بیشتر صبر کنید، بعد از خودتان بپرسید آیا باید دوباره کلیک کنید. هیچ چیز خراب نیست — فقط کند حس میشود.
اگر یک بنیانگذار غیرفنی هستید که با یک اپساز هوش مصنوعی منتشر میکنید، این یکی از شایعترین لحظههای «نمیدانم چه اشکالی دارد» است. خبر خوب این است که ۸۰٪ اپهای کندِ ساختهشده با هوش مصنوعی به همان چند دلیل مشترک کندند. هیچکدامشان لازم نیست یاد بگیرید پایگاه داده چطور کار میکند. همهشان راهحلهایی دارند که میتوانید به زبان ساده از اپساز هوش مصنوعیتان بخواهید انجام دهد.
این مطلب همان برگهٔ تقلب است.
چرا «کند» معمولاً چهار چیز است
وقتی کاربرها میگویند یک اپ کند حس میشود، تقریباً هرگز منظورشان «سرور کمقدرت است» نیست. منظورشان یکی از این چهار چیز است:
- اولین نمایش کند است — روی یک لینک کلیک میکنند و پیش از آنکه چیزی ظاهر شود دو ثانیه به یک صفحهٔ سفید خیره میمانند.
- یک فهرست بلند کُند است — اسکرول کردن، فیلتر کردن، یا بارگذاریِ «همهٔ پروژههایم» بیشتر از اسکرول کردن اینستاگرام طول میکشد.
- یک اقدام بیش از حد طول میکشد بیآنکه بگوید چه خبر است — روی «ذخیره» یا «ارسال» کلیک میکنند و هیچ چیز بهطور دیداری واکنش نشان نمیدهد.
- از پایگاه داده پرسشهای بیش از حد زیادی پرسیده میشود — صفحههایی که داده را از چند جا نشان میدهند هر تکه را جداگانه میگیرند و زمانهای انتظار را روی هم انبار میکنند.
همین. تقریباً هر اپ کندِ ساختهشده با هوش مصنوعی که دیدهام به یکی از آن چهار دلیل کند است. اینجا میگوییم چطور هرکدام را تشخیص دهید و از اپسازتان بخواهید دربارهٔ آن چه کند.
دلیل کندی شمارهٔ ۱: اولین نمایش
چه شکلی است: روی لینکی به اپتان کلیک میکنید، نوار آدرس بارگذاری را تمام میکند، اما صفحه یک یا دو ثانیه سفید است پیش از آنکه چیزی ظاهر شود.
معمولاً چه چیزی باعثش میشود: اپ پیش از نشان دادنِ هر چیزی، هر تکه از JavaScript را که شاید نیاز داشته باشد بارگذاری میکند. اپسازهای هوش مصنوعی تمایل دارند سخاوتمندانه بستهبندی کنند — بهتر است چیزی را شامل شوند تا از قلم بیندازند — و آن بسته هرچه قابلیت بیشتری اضافه کنید بزرگتر میشود.
از اپساز هوش مصنوعیتان چه بخواهید: «اولین بارگذاری صفحه کند حس میشود. میتوانی بستههای JavaScript را بر اساس مسیر تفکیک کنی تا صفحهٔ اصلی مجبور نباشد کل بخش مدیریتی را دانلود کند؟» یا، سادهتر: «برای مسیرهایی که صفحهٔ اصلی نیستند بارگذاری تنبل اضافه کن.» بیشتر فریمورکهای مدرن از این کار با یک یا دو خط پیکربندی پشتیبانی میکنند. هوش مصنوعی میداند چطور — فقط باید بخواهید.
حالا که سرش هستید: «آیا تصویر بزرگی روی لندینگپیج هست که بتوانیم بهینهاش کنیم؟» یک عکس هیروی ۴ مگابایتی سرعتِ ادراکشده را بیش از هر مشکل کدی پایین میآورد.
دلیل کندی شمارهٔ ۲: فهرستِ بلند
چه شکلی است: یک فهرست دارید — پروژهها، مخاطبان، پستها، هر چیزی — و همین که از چهل پنجاه مورد بگذرد، اسکرول گیر میکند یا فیلتر کردن یک لحظهٔ محسوس طول میکشد.
معمولاً چه چیزی باعثش میشود: اپ هر تک مورد را یکجا روی صفحه رندر میکند، حتی آنهایی که نمیتوانید ببینید. با ده مورد اشکالی ندارد. با پانصد مورد، مرورگر خفه میشود.
از اپساز هوش مصنوعیتان چه بخواهید: «فهرست پروژهها وقتی موارد زیادی هست کند است. میتوانیم صفحهبندی اضافه کنیم، یا فهرست را مجازیسازی کنیم تا فقط ردیفهای نمایان رندر شوند؟» صفحهبندی («۲۰ تا در هر صفحه نشان بده، با دکمههای بعدی/قبلی») آسانترین راهحل است. مجازیسازی («فقط آنچه را روی صفحه است هنگام اسکرول کاربر رندر کن») روانتر حس میشود اما کمی کار بیشتری دارد. هر کدام اشکالی ندارد.
اگر فهرست جستوجو یا فیلتر هم دارد: «میشود فیلترِ جستوجو بهجای درون مرورگر، روی سرور انجام شود؟» فیلتر کردن سمت سرور یعنی مرورگر همیشه فقط ردیفهای منطبق را نگه میدارد، نه کل مجموعهٔ داده را.
دلیل کندی شمارهٔ ۳: انتظارِ خاموش
چه شکلی است: روی «ذخیره» یا «ارسال» یا «تولید» کلیک میکنید. هیچ چیزِ نمایانی اتفاق نمیافتد. دو ثانیه بعد، صفحه بهروز میشود و میفهمید که تمام مدت داشت کار میکرد.
معمولاً چه چیزی باعثش میشود: اپ دارد کار واقعی میکند — ذخیره در پایگاه داده، فراخوانی یک API — اما اپساز حالت بارگذاری اضافه نکرده. پس از دید شما، کلیک هیچ کاری نکرد.
این در واقع یک مشکل کارایی نیست. یک مشکل کاراییِ ادراکشده است، و آنها اغلب دردناکتر از واقعیها هستند. یک اقدام ۲۰۰ میلیثانیهای بدون بازخورد، کندتر از یک اقدام ۲ ثانیهای با یک چرخندهٔ بارگذاری حس میشود، چون مغز کاربر در تاریکی است.
از اپساز هوش مصنوعیتان چه بخواهید: «به هر دکمهای که یک اقدام را راه میاندازد یک حالت بارگذاری اضافه کن. هنگام کار کردن یک چرخنده یا متن ‘در حال ذخیره…’ نشان بده، و دکمه را غیرفعال کن تا کاربرها نتوانند دوبار کلیک کنند.» این تنها راهحلِ کاراییِ با بالاترین بازده در هر اپ است و تقریباً هیچ هزینهای ندارد.
حالا که سرش هستید: «برای اقدامهایی که میدانیم نتیجه چه خواهد بود، میتوانیم رابط کاربری را خوشبینانه بهروز کنیم — تغییر را فوری نشان دهیم و اگر سرور رد کرد عقبش بکشیم؟» بهروزرسانیهای خوشبینانه همان دلیلی است که دکمهٔ «لایک» در اپهای اجتماعی فوری حس میشود حتی وقتی گوشیتان دریافت افتضاحی دارد.
دلیل کندی شمارهٔ ۴: پایگاه دادهٔ پرحرف
چه شکلی است: صفحهای که فهرستی از موارد را نشان میدهد، هرکدام با اطلاعات اضافه — مثل فهرستی از پروژهها با تعداد وظایفِ هرکدام — خیلی بیشتر از یک فهرست ساده برای بارگذاری طول میکشد.
معمولاً چه چیزی باعثش میشود: صفحه پروژهها را در یک کوئری بارگذاری میکند، بعد تعداد وظایفِ هر پروژه را در یک کوئری جداگانه بارگذاری میکند. ده پروژه؟ یازده کوئری. صد پروژه؟ صد و یک. به این «کوئریِ N+۱» میگویند، و شایعترین باگ کارایی پایگاه داده در اپهای ساختهشده با هوش مصنوعی است چون هوش مصنوعی برای کدی بهینه میکند که خوانا باشد، نه کدی که کارآمد اجرا شود.
از اپساز هوش مصنوعیتان چه بخواهید: «این صفحه برای هر مورد یک کوئری میزند. میتوانیم همهٔ دادههای مرتبط را در یک کوئری واحد بگیریم — یک join یا یک aggregate؟» لازم نیست بدانید هیچکدام از این دو کلمه چه معنایی دارند. هوش مصنوعی میداند. نشان دادنِ صفحهٔ کند به آن و گفتن «فکر میکنم این یک مشکل N+۱ دارد» معمولاً کافی است.
میتوانید مشکلهای N+۱ را بدون هیچ ابزاری تشخیص دهید: صفحه را باز کنید، بشمارید چقدر طول میکشد، بعد ده برابر بیشتر مورد به فهرستِ زیرین اضافه کنید. اگر صفحه حالا ده برابر کندتر است، یک N+۱ دارید. اگر فقط کمی کندتر است، ندارید.
یک کلمه دربارهٔ بهینهسازیِ زودهنگام
دامی که سازندگان تازهکار در آن میافتند: تلاش برای سریع کردن هر صفحه پیش از آنکه کسی از اپ استفاده کند. نکنید.
کارِ کارایی هزینهٔ واقعی دارد. افزودن صفحهبندی به فهرستی که هرگز بیش از بیست ردیف نخواهد داشت تلاش هدررفته است. بهینهسازی صفحهای که روزی دو بار بارگذاری میشود تلاش هدررفته است. تفکیک بستهها برای یک ابزار داخلی با سه کاربر تلاش هدررفته است. زمان درست برای درست کردنِ یک صفحهٔ کند وقتی است که میتوانید صفحه، اقدام، و آدمی را که از آن آزرده شد نام ببرید.
پس اول آن را بهطور معمولی بسازید. منتشرش کنید. تماشا کنید چطور استفاده میشود. وقتی چیزی برای یک آدم واقعی — از جمله خودتان — کند حس شد، نشانه را با یکی از چهار دستهٔ بالا منطبق کنید و آن راهحلِ مشخص را بخواهید. اپی سریعتر خواهید گرفت بدون اینکه یک هفته روی زیرساختی که کاربرهایتان هرگز متوجهش نمیشوند صرف کنید.
چطور با اپساز هوش مصنوعیتان دربارهٔ سرعت حرف بزنید
یک الگو که جواب میدهد: نشانه را توصیف کنید، نه راهحل را. هوش مصنوعی بسیار بهتر از آنچه فکر میکنید در انتخاب راهحلِ درست است، تا وقتی بداند واقعاً چه چیزی اشکال دارد.
دستورهای خوب برای کپی کردن:
- «وقتی صفحهٔ تنظیمات را باز میکنم، یک ثانیه تأخیر هست پیش از آنکه چیزی ظاهر شود. میتوانیم بفهمیم چه چیزی اولین رندر را مسدود میکند؟»
- «داشبورد بیشتر از صفحهٔ اصلی برای بارگذاری طول میکشد با اینکه دادهٔ کمتری نشان میدهد. میتوانیم نگاهی بیندازیم که چطور دادهاش را میگیرد؟»
- «وقتی روی صفحهٔ پروفایل ‘ذخیرهٔ تغییرات’ را میزنم، دو ثانیه هیچ چیز اتفاق نمیافتد. یک حالت بارگذاری اضافه کن و مطمئن شو دکمه نمیتواند دوبار کلیک شود.»
- «این فهرست را با ۵۰۰ موردِ قلابی آزمایش کن و به من بگو کندیها کجاست.»
آخری دستکم گرفته میشود. خواستن از هوش مصنوعی برای تولید دادهٔ آزمایشی و امتحان کردنِ خودِ صفحه یکی از مفیدترین کارهایی است که میتوانید بکنید. اغلب نقاط کند را پیش از کاربرهایتان پیدا میکند — و راهحل را در همان پاسخ پیشنهاد میدهد.
سرعت در اپهای ساختهشده با هوش مصنوعی دربارهٔ جادو نیست. دربارهٔ دانستن این است که مشکلتان در کدامیک از چهار سطل میافتد، و خواستنِ راهحلِ درست با کلمات روشن. این کار را بکنید، و «کند حس میشود» با یک مشت تغییر کوچک و هدفمند تبدیل به «خوب حس میشود» میشود — نه یک بازنویسی کامل.