সর্বোত্তম অনুশীলন

এই নথিতে স্ক্রিপ্টের কর্মক্ষমতা উন্নত করার জন্য সর্বোত্তম অনুশীলনের তালিকা রয়েছে।

অন্যান্য পরিষেবায় কল কম করুন

আপনার স্ক্রিপ্টের মধ্যে জাভাস্ক্রিপ্ট অপারেশন ব্যবহার করা অন্যান্য পরিষেবা কল করার চেয়ে দ্রুত। Google Apps স্ক্রিপ্টের মধ্যে আপনি যা কিছু করেন তা Google এর সার্ভার বা বাহ্যিক সার্ভার থেকে ডেটা আনার চেয়ে দ্রুত, যেমন Sheets, Docs, Sites, Sites, Translate, এবং UrlFetch-এ অনুরোধ করা। আপনি যদি পরিষেবা কল কমিয়ে আনেন তবে আপনার স্ক্রিপ্টগুলি দ্রুত চলবে।

শেয়ার্ড ড্রাইভের সাথে সহযোগিতা করুন

যদি আপনি অন্য ডেভেলপারদের সাথে স্ক্রিপ্ট প্রকল্পে কাজ করেন, তাহলে শেয়ার্ড ড্রাইভ ব্যবহার করে সহযোগিতা করুন । শেয়ার্ড ড্রাইভের ফাইলগুলি ব্যক্তিদের নয় বরং গোষ্ঠীর মালিকানাধীন, যা প্রকল্পের উন্নয়ন এবং রক্ষণাবেক্ষণকে সহজ করে তোলে।

ব্যাচ অপারেশন ব্যবহার করুন

স্ক্রিপ্টগুলি সাধারণত স্প্রেডশিট থেকে ডেটা পড়ে, গণনা করে এবং ফলাফলগুলি আবার লেখে। অ্যাপস স্ক্রিপ্ট লুক-আহেড এবং রাইট ক্যাশিংয়ের মতো অন্তর্নির্মিত অপ্টিমাইজেশন ব্যবহার করে।

রিড এবং রাইট কমিয়ে বিল্ট-ইন ক্যাশিং সর্বাধিক করুন। রিড এবং রাইট কমান্ড অল্টারনেটিং ধীর। একটি স্ক্রিপ্টের গতি বাড়ানোর জন্য, একটি কমান্ড দিয়ে সমস্ত ডেটা একটি অ্যারেতে পড়ুন, অ্যারে ডেটাতে ক্রিয়াকলাপ সম্পাদন করুন এবং একটি কমান্ড দিয়ে ডেটা লিখুন।

এই অদক্ষ উদাহরণে দেখানো হয়েছে, বিকল্প পঠন এবং লেখা এড়িয়ে চলুন:

// DO NOT USE THIS CODE. It is an example of SLOW, INEFFICIENT code.
// FOR DEMONSTRATION ONLY
var cell = sheet.getRange('a1');
for (var y = 0; y < 100; y++) {
  xcoord = xmin;
  for (var x = 0; x < 100; x++) {
    var c = getColorFromCoordinates(xcoord, ycoord);
    cell.offset(y, x).setBackgroundColor(c);
    xcoord += xincrement;
  }
  ycoord -= yincrement;
  SpreadsheetApp.flush();
}

স্ক্রিপ্টটি অদক্ষ কারণ এটি পরপর লেখার মাধ্যমে ১০,০০০ কোষের মধ্য দিয়ে যায়। যদিও লেখার-ব্যাক ক্যাশে সাহায্য করে, ব্যাচিং কলগুলি অনেক বেশি দক্ষ:

// OKAY TO USE THIS EXAMPLE or code based on it.
var cell = sheet.getRange('a1');
var colors = new Array(100);
for (var y = 0; y < 100; y++) {
  xcoord = xmin;
  colors[y] = new Array(100);
  for (var x = 0; x < 100; x++) {
    colors[y][x] = getColorFromCoordinates(xcoord, ycoord);
    xcoord += xincrement;
  }
  ycoord -= yincrement;
}
sheet.getRange(1, 1, 100, 100).setBackgrounds(colors);

অদক্ষ কোডটি চালাতে প্রায় ৭০ সেকেন্ড সময় লাগে, যেখানে দক্ষ কোডটি মাত্র ১ সেকেন্ডে চলে।

UI-ভারী স্ক্রিপ্টে লাইব্রেরি এড়িয়ে চলুন

কোড পুনঃব্যবহারের জন্য লাইব্রেরিগুলি সুবিধাজনক কিন্তু স্ক্রিপ্ট শুরুর সময় বৃদ্ধি করে। এই বিলম্ব ক্লায়েন্ট-সাইড HTML পরিষেবা ব্যবহারকারী ইন্টারফেসগুলিতে লক্ষণীয় যা বারবার, স্বল্প-চলমান google.script.run কল করে। অ্যাড-অনগুলিতে লাইব্রেরিগুলি অল্প পরিমাণে ব্যবহার করুন এবং অনেক google.script.run কল করে এমন স্ক্রিপ্টগুলিতে এগুলি এড়িয়ে চলুন।

ক্যাশে পরিষেবা ব্যবহার করুন

স্ক্রিপ্ট এক্সিকিউশনের মধ্যে রিসোর্স ক্যাশে করার জন্য ক্যাশে পরিষেবা ব্যবহার করুন। ক্যাশে ডেটা আনার ফ্রিকোয়েন্সি হ্রাস করে। নিম্নলিখিত উদাহরণটি দেখায় যে ধীর RSS ফিডে অ্যাক্সেস দ্রুত করার জন্য ক্যাশে পরিষেবা কীভাবে ব্যবহার করবেন।

function getRssFeed() {
  var cache = CacheService.getScriptCache();
  var cached = cache.get("rss-feed-contents");
  if (cached != null) {
    return cached;
  }
  // This fetch takes 20 seconds:
  var result = UrlFetchApp.fetch("http://example.com/my-slow-rss-feed.xml");
  var contents = result.getContentText();
  cache.put("rss-feed-contents", contents, 1500); // cache for 25 minutes
  return contents;
}

আইটেমটি ক্যাশে না থাকলে আপনি এখনও ২০ সেকেন্ড অপেক্ষা করলেও, আইটেমটির মেয়াদ শেষ না হওয়া পর্যন্ত পরবর্তী অ্যাক্সেসগুলি দ্রুত হবে।

বৃহৎ ডেটাসেট এবং জটিল গণনা

গুগল শিটস একটি শক্তিশালী হাতিয়ার, কিন্তু ডেটাসেটগুলি বৃদ্ধি পাওয়ার সাথে সাথে এবং গণনাগুলি আরও জটিল হয়ে উঠলে, আপনি স্প্রেডশিট ল্যাগ, IMPORTRANGE ত্রুটি এবং স্ক্রিপ্ট টাইমআউটের মতো কর্মক্ষমতা সমস্যার সম্মুখীন হতে পারেন।

কখন ডাটাবেস ব্যবহার করবেন

যদি আপনার স্প্রেডশিট ১ কোটি কোষের সীমা অতিক্রম করে অথবা আপনার যদি অনেক সংযুক্ত ফর্ম (যেমন, ১০ বা তার বেশি) এবং জটিল ক্রস-শিট সূত্র থাকে, তাহলে একটি ডেডিকেটেড ডাটাবেস সমাধান ব্যবহার করার কথা বিবেচনা করুন।

  • গুগল ক্লাউড এসকিউএল : মাইএসকিউএল, পোস্টগ্রেএসকিউএল এবং এসকিউএল সার্ভারের জন্য একটি সম্পূর্ণরূপে পরিচালিত রিলেশনাল ডাটাবেস পরিষেবা। ক্লাউড এসকিউএল বা ওরাকল বা মঙ্গোডিবি-র মতো অন্যান্য বহিরাগত ডাটাবেসের সাথে সংযোগ স্থাপন করতে (উপযুক্ত ব্রিজের মাধ্যমে) জেডিবিসি পরিষেবা ব্যবহার করুন।
  • BigQuery : একটি সার্ভারহীন, অত্যন্ত স্কেলেবল ডেটা গুদাম। আপনি সরাসরি Sheets-এ বৃহৎ BigQuery ডেটাসেট বিশ্লেষণ করতে Connected Sheets ব্যবহার করতে পারেন, অথবা Apps Script থেকে ডেটার সাথে ইন্টারঅ্যাক্ট করতে BigQuery পরিষেবা ব্যবহার করতে পারেন।

সূত্র কর্মক্ষমতা অপ্টিমাইজেশন

নির্দিষ্ট সূত্রের অত্যধিক ব্যবহার আপনার স্প্রেডশিটকে ধীর করে দিতে পারে:

  • ARRAYFORMULA : যদিও কার্যকর, বৃহৎ আকারের ARRAYFORMULA গণনা ব্যয়বহুল হতে পারে।
  • VLOOKUP এবং OFFSET : বৃহৎ ডেটাসেটে এই ফাংশনগুলি ধীর হতে পারে। মেমরিতে আরও দক্ষতার সাথে লুকআপ সম্পাদন করতে INDEX এবং MATCH অথবা Apps Script ব্যবহার করার কথা বিবেচনা করুন।
  • IMPORTRANGE : অনেক শিটে IMPORTRANGE এর ঘন ঘন ব্যবহার "অভ্যন্তরীণ ত্রুটি" সৃষ্টি করতে পারে যদি সোর্স শিটগুলি বড় হয় বা ভারী বোঝার মধ্যে থাকে। একটি কেন্দ্রীভূত উৎসে ডেটা একত্রিত করা সাহায্য করতে পারে।

স্ক্রিপ্ট টাইমআউট হ্যান্ডলিং

অ্যাপস স্ক্রিপ্টের এক্সিকিউশনের সময়সীমা রয়েছে (সাধারণত প্রতিটি এক্সিকিউশনের জন্য ৬ মিনিট, অথবা কিছু Google Workspace অ্যাকাউন্টের জন্য ৩০ মিনিট)। যদি আপনার স্ক্রিপ্ট এক্সিকিউশনের সীমা অতিক্রম করার কারণে ঘন ঘন ক্র্যাশ করে:

  1. ব্যাচ অপারেশন ব্যবহার করুন : ব্যাচ অপারেশন ব্যবহার করুন বিভাগে উল্লিখিত হিসাবে, স্প্রেডশিট এবং অন্যান্য পরিষেবাগুলিতে কল কমিয়ে আনুন।
  2. কাজগুলো ভাগ করুন : বড় কাজগুলোকে ছোট ছোট অংশে ভাগ করুন যাতে প্রতিটি সময়সীমার মধ্যে সম্পন্ন করা যায়।
  3. ধারাবাহিকতার জন্য ট্রিগার ব্যবহার করুন : দীর্ঘমেয়াদী প্রক্রিয়া পুনরায় শুরু করার জন্য একটি ইনস্টলযোগ্য সময়-চালিত ট্রিগার সেট আপ করুন। আপনার স্ক্রিপ্টটি প্রোপার্টি পরিষেবা ব্যবহার করে তার বর্তমান অবস্থা (যেমন, শেষ প্রক্রিয়াকৃত সারি সূচক) সংরক্ষণ করতে পারে এবং পরবর্তী সম্পাদনে সেই বিন্দু থেকে চালিয়ে যেতে পারে।