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

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

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

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

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

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

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

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

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

এখানে একটি উদাহরণ দেওয়া হল — এমন একটি উদাহরণ যা আপনার অনুসরণ করা বা ব্যবহার করা উচিত নয়। একটি স্ক্রিপ্ট ১০০ x ১০০ স্প্রেডশিট গ্রিডের প্রতিটি ঘরের ব্যাকগ্রাউন্ড রঙ সেট করতে নিম্নলিখিত কোড ব্যবহার করে। এটি প্রতিটি ঘরের জন্য কোন রঙ ব্যবহার করতে হবে তা নির্ধারণ করতে getColorFromCoordinates() নামক ফাংশন (এখানে দেখানো হয়নি) ব্যবহার করে:

  // 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();
  }

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

কিন্তু কলগুলিকে ব্যাচ করে কোডটিকে আরও দক্ষ করে তোলা যেতে পারে। এখানে একটি পুনর্লিখন রয়েছে যেখানে সেল রেঞ্জটি colors নামক একটি অ্যারেতে পড়া হয়, অ্যারের ডেটাতে রঙের অ্যাসাইনমেন্ট অপারেশন করা হয় এবং অ্যারের মানগুলি স্প্রেডশিটে লেখা হয়:

  // 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-ভারী স্ক্রিপ্টে লাইব্রেরি এড়িয়ে চলুন

লাইব্রেরি কোড পুনঃব্যবহারের একটি সুবিধাজনক উপায়, তবে স্ক্রিপ্ট শুরু করতে যে সময় লাগে তা কিছুটা বাড়িয়ে দেয়। তুলনামূলকভাবে দীর্ঘস্থায়ী স্ক্রিপ্টগুলির জন্য (যেমন আপনার Google ড্রাইভ ফাইলগুলি পরিষ্কার করার জন্য একটি ইউটিলিটি স্ক্রিপ্ট) এই বিলম্ব লক্ষণীয় নয়, তবে ক্লায়েন্ট-সাইড HTML পরিষেবা ব্যবহারকারী ইন্টারফেসগুলির জন্য যা বারবার, স্বল্প-চলমান google.script.run কল করে, বিলম্ব প্রতিটি কলকে প্রভাবিত করবে। এই সমস্যার কারণে, অ্যাড-অনগুলিতে লাইব্রেরিগুলি অল্প পরিমাণে ব্যবহার করা উচিত এবং আপনি নন-অ্যাড-অন স্ক্রিপ্টগুলিতে এগুলি এড়াতে চাইতে পারেন যা প্রচুর google.script.run কল করে।

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

স্ক্রিপ্ট এক্সিকিউশনের মধ্যে রিসোর্স ক্যাশে করার জন্য আপনি ক্যাশ সার্ভিস ব্যবহার করতে পারেন। ডেটা ক্যাশ করে, আপনি ডেটা আনার সময় বা ফ্রিকোয়েন্সি কমাতে পারেন। example.com-এ আপনার একটি 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;
  }

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